首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

你了解与不了解的神经网络(1)

神经网络

(neural network)

神经网络是机器学习中的一种经典模型,也是现在深度学习的前身和基础,因此如果要想掌握深度学习,必须通透地了解神经网络。

你需要了解:

▪ 神经网络的线性结构

▪ 非线性激活函数

▪ 掌握参数训练的反向传播算法

▪ 多层神经网路的梯度弥散问题

01

神经元和感知机

神经网络是由一个个基本的神经元组合而成的,而这些神经元模拟人脑中神经细胞,拥有若干个输入和输出(对应树突和轴突),通常在学术界我们将其称为感知机。下面是神经元的图片。

对于一个神经元细胞,拥有接受信号的树突和输出信号的轴突,根据这种模式,学者设计一个输入输出模式的单元,并命名为感知机:

输入表示为

对于输入xi有一个权重系数wi,表示为

另外加一个常数偏置b,为了实现二分类,最后的输出写作:

其中sign表示符号函数,这是一个很典型的线性分类方式。如上图的右侧,假如在二维平面,存在一条直线y=WX+b,那么这条直线就可以把空间分为两部分,分别对应WX+b>0和WX+b超平面,将空间同样分为大于0和小于0两部分。但是仍然只能实现线性分类,为了实现非线性分类,学者在感知机后面加入一个非线性单元——激活函数。在神经网络刚出来的时候,常用的激活函数有sigmoid函数和tanh,它们的公式为:

第一个为sigmoid函数,值域范围为[0,1],第二个为tanh函数,值域范围[-1,1],通过多个这样的非线性感知机,那么理论上我们最终可以逼近任意一个超曲面,如果这个非线性的激活函数我们只能得到一个由若干个超平面组合而成多边形超平面。

那么为什么选择这些激活函数了,我们不妨以sigmoid函数为例,求一下sigmoid的导数:

所以sigmoid函数的导数可以用自身来表示,有兴趣的读者不妨自己推导tanh的导数,是否也满足这一个规律。这一点对于编程实现非常重要,可以得到导数的解析解而不是数值解,因为神经网络的训练都是基于梯度(导数)实现的。

02

多层前馈神经网络

之前我们已经介绍了单个神经元(感知机),我们仿照人脑神经系统,把这些神经元给全连接起来,便可以得到一个多层感知机(Multi-layer Perceptron, MLP),也叫做多层神经网络。在多层神经网络中,第一层叫做输入层(input layer),最后一层叫做输出层(output layer),中间的都叫做隐层(hidden layer),下面是一个单隐层神经网络的教材例子

从输入到输出的过程是把数值从低层传向高层,这个过程叫做前馈传播。两层神经元之间都有一条线连接,这条线代表着这两个神经元之间的权重系数

表示输入层第i个神经元到隐层第j个神经元的权重系数,代表输入层到隐层的偏置,表示隐层第i个神经元到输出层第j个神经元的权重系数,代表隐层到输出层的偏置,上图的输出层只有一个神经元。

其中的所有集用表示,是个二维矩阵,同理的所有集用表示,最终待训练的参数集

隐层的神经元先接受来自输入层的数值:

然后经过激活函数f()得到该神经元的隐含值:

同理,输出层神经元的输出也可以得到:

单隐层单输出的神经网络拓展到更一般的形式,输入层和输出层也可以当做第一层和最后一层来看待,和上面类似,我们有权重系数w(l)ij,其中l代表第l到l+1层,i代表第l+1的第i个神经元,j代表第l的第j个神经元,另外b(l)表示第l到l+1层的偏置。最后前馈传播的公式可以表示为:

利用这个传播公式,我们就可以从输入x得到输出的值了,那么接下来的问题就是如何去训练得到最优的参数集(W,b)

在下一期的推文中,我们将继续为你深度讲解神经网络中的经典算法:BP反向传播算法,并给出一个基于深度学习框架的程序。

精彩未完待续

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180415G0A81X00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券