多层感知机(MLP)与神经网络结构 | 深度学习笔记

为了尽量能形成系统的体系,作为最基本的入门的知识,请参考一下之前的一篇:感知机 | 神经网络 。

上篇文章让你形成对于神经网络最感性的理解。有些看不懂的直接忽略就行,最基本的符号的记法应该要会。后面会用到这篇文章中的一些记号和用法的约定什么的之后就不再啰嗦了。

01

基本结构

看完上面给出的文章或者已经有基本概念的同学应该对于神经网络的基本结构有基本的认识了。但是上面那个还只是涉及到单层结构,并没有推广到多层结构,同时,也没有在实践中使用这种结构的经验。所以,这节的内容就是以手写体识别为例子来讲一下基本结构,和实践中的基本使用思想。

这是推广到更加复杂任务上的基础。

假设你现在已经有了神经网络的一些感性认识了,那就就看下面这幅图。

输入层(最左边),隐藏层(中间两层),和输出层(最右边),在之前列出的博客就讲过了,这里回顾一下。感受一下大概的架构。

神经网络的流程分为前向过程和反向过程。反向过程一般用于训练,后面讲,这里只讲前向过程。

还记得每个神经元上面都有对于一个输入的权值,以及一个偏置,还有一个激活函数。(不知道的话看之前列出来的博客,后面不再强调了),所以一个前向过程的流程就是input输入,然后经过第一层神经元运算(乘上权值,加上偏执,激活函数运算一次),得到输出,然后第一层的输出作为第二层的输入,运算,得到第二层的输出…..直到到输出层运算,然后得到结果。神经网络就是依靠这样一套机制来进行计算和预测的。

假如你的权值和偏置已经是被训练好了。对于一个新的输入,进行这样的过程,就能够得到一个预测。那么你就能够通过这个预测来解决一些问题了。所以有机器学习思想的话,这些概念是很容易理解的。而我们的任务就是找到权值和偏置这些参数的值,使得输出的东西让我们满意,达到我们的要求。

这里先补充一个思想:

假如我们改变了某个神经元或者某几个神经元的权值或者偏置一点点,那么该神经元的输出肯定会变得不同,这些不同最终将反应在输出上面。如上面的图所示。所以,我们可以通过合理地改变权值和偏置一点点的方式来让这个神经网络最后的结果向我们预期的结果进军(sorry,我想不到好词了)。

然后说激活函数,还是在前面的博客链接中,给了很多的激活函数类型。激活函数的选择对于神经网络的训练来说,也是很重要的,这个后面再讲到。

现代神经网络激活函数总结,可以看这篇文章:

常见激活函数总结 | 深度学习笔记2

这里先以sigmoid函数为例子,讲讲激活函数的作用。所以,你这里先暂时假设我们没得选,只有sigmoid函数。

这个时候,有没有发现对于感知机前向过程的形式很像logistic回归的形式?

那我们为什么要选择sigmoid函数呢? 我们知道一个神经元还是选择了sigmoid函数之后,他的输出为\sigma(w*x+b) ,这也就是我为什么说这个形式很像logistic回归的原因。

上面的文章里面给出过这个函数的形状,这里再贴一次。其实你肯定也很熟悉了。

这个函数变动不大,很温和。不像阈值函数那样粗暴的从0到1,这是很符合之前的那个思想的。当然这个函数还有另外一个优点,就是平滑。平滑能够使得权值和偏置非常微小的变动能够使得最终的结果也产生非常微小的变动。这才是很重要的。

写成公式,就应该是这样:

怎么理解这个公式呢?

首先在机器学习里面我们不是说过,我们的任务就是找一个函数f(w,b),然后他的输出output就是由这个函数产生。你再来看这里,这里虽然是神经网络,但是整个神经网络还是一个函数。

然后回顾一下全微分的定义:

同样可以推广到多元的形式,再看上面的那个公式就不难了吧。

这里还有一个要注意的就是,从上面公式的形式来看,\Delta output 就是\Delta w_{j}\Delta b 的一个线性函数,于是我们能够选择一个小的权值和偏置的改变,使得结果以我们期望的方式改变。

讲了这么多,现在根据一个例子来谈谈实践中是怎么设计网络的结构的,很简单,也很重要。

以MNIST手写体为例子,里面都是28x28的灰度图,假如以我们现在这么简单的网络形式,我们可以考虑把所有28x28的图片统一展开为一个一维数列(这样可能会丢掉某些位置信息,后面CNN会讲到这个),然后得到一个结构,含有784(28x28)个值。

回到网络这里来,对于输入层而言,我们可以“设定”784个单元,分别接受每一个像素的值。对于输出层而言,我们可以只设定一个神经元,用来输出这个数字是几,我们也可以设定10个神经元,分别代表0到9,然后输出这个那个数字更加有可能。

从上面看,设计输入层和输出层还是比较轻松的,但是设计隐藏层是比较难的。后面再讨论。

02

训练神经网络

这里暂时默认训练神经网络的损失函数为二次损失函数:

右边的为L-2范数,当做欧氏距离理解就行。我们的目标就是找到合适的w(权值)和偏置(b)使得这个损失函数最小。意味着网络输出的值会越来越接近真实值。

训练神经网络的方法为随机梯度下降法:

写成梯度下降的形式为:

也就是说,通过不停的迭代,找到最合适的权值和偏置,使得损失最小。这在机器学习里面是很基础的东西了。

最终,我们的任务就成了计算偏导: \frac{\partial C} {\partial w_{k}} \frac{\partial C} {\partial b_{i}} 了。

但是这里是神经网络啊,那么多层,那么多参数,传统方式怎么计算偏导?所以对于偏导的计算就是反向传播的任务了。

原文发布于微信公众号 - 人工智能LeadAI(atleadai)

原文发表时间:2017-09-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏企鹅号快讯

受限玻尔兹曼机

关注AI君,领略人工智能之美 受限玻尔兹曼机 Restricted Bolltzmann Machine 概述 各位读者,新年好! 在《技术词条》系列文章的上一...

2209
来自专栏老秦求学

[手把手系列之二]实现多层神经网络

训练集: \(X = [x^{(1)},x^{(2)},...,x^{(i)},....,x^{(m)}]\) ;对应标签:\(Y=[y^{(1)},y^{(2...

1205
来自专栏Petrichor的专栏

深度学习: 随机失活 (dropout)

按概率p 随机 将神经元 置 0 [如下(b)图],以 缓解 神经元之间 隐形的协同适应,从而达到降低模型复杂度的目的:

1148
来自专栏机器学习算法与Python学习

Machine Learning -- GBDT(RF)

前言: 决策树这种算法有着很多良好的特性,比如说训练时间复杂度较低,预测的过程比较快速,模型容易展示(容易将得到的决策树做成图片展示出来)等。但是同时, 单决策...

3095
来自专栏机器学习算法与Python学习

随机森林与GBDT

转自于:博客园-LeftNotEasy 前言: 决策树这种算法有着很多良好的特性,比如说训练时间复杂度较低,预测的过程比较快速,模型容易展示(容易将得...

2855
来自专栏小鹏的专栏

反向传播与它的直观理解

为了感谢大神,我是跪在电脑前fork的。 问题描述与动机: 大家都知道的,其实我们就是在给定的图像像素向量x和对应的函数f(x),然后我们希望能够计算f在...

1799
来自专栏企鹅号快讯

基于tensorflow的手写数字识别

一、前言 本文主要介绍了tensorflow手写数字识别相关的理论,包括卷积,池化,全连接,梯度下降法。 二、手写数字识别相关理论 2.1 手写数字识别运算方法...

2277
来自专栏智能算法

逻辑回归(LR)算法

一、算法介绍 Logistic regression (逻辑回归)是一种非线性回归模型,特征数据可以是连续的,也可以是分类变量和哑变量,是当前业界比较常用的机...

3646
来自专栏林欣哲

科个普啦—机器学习(下)

在机器学习(上)里谈到了机器是如何学习的,当前主流的学习方法是监督式学习,即用大量带标签的数据训练机器使得机器知道如何解决问题。 那么训练就得有效果,指导机器往...

3406
来自专栏决胜机器学习

深层神经网络参数调优(五) ——超参数调试、batch归一化、softmax回归

深层神经网络参数调优(五) ——超参数调试、batch归一化、softmax回归 (原创内容,转载请注明来源,谢谢) 一、超参数调试 1、超参数 超参数是不直...

3898

扫码关注云+社区