第十章——神经网络
10.1 线性分类器的局限
10.2 神经元
10.3 神经网络中的信号
10.4 反向传播误差
10.5 更新权重
10.6 激活函数
10.1 线性分类器的局限
- 如果数据本身不是由单一线性过程支配,那么一个简单的线性分类器不能对数据进行划分。(例XOR运算符支配的数据)
- 解决方案:用多个线性分类器来划分由单一直线无法分离的数据,这也是神经网络的核心思想。
10.2 神经元
1、关于神经元
- 神经元接收一个电输入,输出另一个电信号。
- 生物神经元还是和简单的线性函数不太一样。
- 神经元不会对微小噪声信号输入做出反应,而是会抑制输入,直到输入增强到触发输入。
- 相关函数:阈值(threshold)、阶跃函数、S函数(S激活函数,sigmoid())、逻辑函数(logistic function,下图公式)。
2、神经元工作机制
3、计算机和生物神经元 - 虽然生物大脑的存储空间比现代计算机少得多、运行速度慢,但生物大脑却可以执行复杂的任务,比如飞行、寻找食物、学习语言和逃避天敌。
- 相比于传统的计算机系统,生物大脑对损坏和不完善的信号具有难以置信的弹性。
- 由互相连接的神经组成的生物大脑是人工神经网络的灵感来源。
10.3 神经网络中的信号
1、神经网络如何工作
- 第一个矩阵包含两层节点之间的权重,第二个矩阵包含第一层输入层的信号。
- 用X=W*I计算组合调节后输入到第二层的信号x,W是权重矩阵,I是输入矩阵,X是组合调节后的信号。
- 第二层最终输出是:O=sigmoid(X)
- 若有第三层,输出计算:X’=W’*O,O为第二层的输出(O=sigmoid(X)),W’为第三层的权重,X’为第三层的输出。
10.4 反向传播误差
1、一个输出节点学习来自多个节点的权重(一个输出节点的反向传播)
-
上图中有两个节点链接到输出结点,那么输出节点需要在这2条链接中,按照误差所做的贡献比例(由链接权重大小表示)进行分割误差。
-
权重的作用:
①神经网络使用权重将信号从输入向前传播到输出层。
②使用权重将误差从输出向后传播到网络中,这种方法也称为反向传播。
2、多个输出节点反向传播误差
-
上图的权重w1,1和w2,1对误差e1进行了分割,权重w1,2和w2,2对误差e2进行了分割。
3、反向传播到更多层 -
当神经网络多于2层时,在离最终输出层相对较远的层中,误差权重要如何链接呢?
4、使用矩阵乘法进行反向传播误差
-
实践证明,使用将归一化因子切除这种相对简单的误差信号反馈方式,与先前相对复杂的方式一样有效。
-
即使反馈的误差过大或过小,在下一轮的学习迭代中,网络也可以自行纠正。
-
由于链接权重的强度给出了共享误差的最好指示,因此反馈的误差应该遵循链接权重的强度。
5、补充
- 神经网络通过调整链接权重进行学习,这种方法由误差引导。
- 误差:训练数据所给出正确答案和实际输出之间的差值。
- 与内部节点相关联的误差并不显而易见。一种方法是按照链路权重的比例来分割输出层的误差,然后在每个内部节点处重组这些误差。
10.5 更新权重
1、梯度下降法(gradient descent)
(更新权重的计算公式有点繁琐,作者要制备期末考试,暂时不展示了,感兴趣可自行搜索)
- 神经网络的误差是内部链接权重的函数。改进神经网络,意味着通过改变权重减少这种误差。
- 直接选择合适的权重比较困难。解决方法是通过误差函数的梯度下降,采取小步长,迭代地改进权重。所迈出的每一步的方向都是在当前位置向下斜率最大的方向。
10.6 激活函数
1、什么是激活函数?
- 激活函数(Activation Function)是一种添加到神经网络中的函数,旨在帮助网络学习数据中的复杂模式。
- 在多层神经网络中,上层节点的输出和下层节点的输入之间具有一个函数关系,这个函数称为激活函数。
- 类似于人类大脑中基于神经元的模型,激活函数最终决定了要发射给下一个神经元的内容。
2、为什么需要激活函数?
- 数据的分布大部分是非线性的,而一般神经网络的计算是线性的,而激活函数的引入,就是在神经网络中引入非线性,强化网络的学习能力和表达能力。所以激活函数的最大特点就是非线性。
- 神经网络中激活函数的作用通俗上讲就是将多个线性输入转换为非线性的关系。
3、三种的激活函数?
-
Sigmoid激活函数——也称Logistic函数,因为Sigmoid函数可以从Logistic回归(LR)中推理得到的。
Sigmoid激活的取值范围在(0,1)之间。
优点:把一个一个连续输入的实数压缩到0-1之间,当输入的数字非常大时,结果会接近1,当输入非常大的负数时,结果接近0,这使得Sigmoid可以将实数范围的值表示成概率的形式。它很好的解释了神经元收刺激后是否被激活和向后传递的场景(0表示几乎没激活,1表示完全被激活)。缺点: ① Sigmoid计算量大(在正反向传播中都包含幂运算和除法);② Sigmoid导数取值范围在[0, 0.25],由于神经网络反向传播时的“链式反应”,易出现梯度消失的情况;③ Sigmoid的输出不是0均值,导致后一层网络将上一次输出的非0均值信号作为输入,随着网络的加深,会改变数据的原始分布。
-
Tanh激活函数——tanh为双曲正切函数,英文读作Hyperbolic Tangent。Tanh和Sigmoid相似,都属于饱和激活函数,区别在于输出值范围由 (0,1) 变为了(-1,1),可以把 tanh 函数看做是 sigmoid 向下平移和拉伸后的结果。
优点:在神经网络的应用中,tanh通常要优于Sigmoid的。① 因为 tanh的输出范围在-1~1之间均值为0,解决了Sigmoid函数的不是zero-centered输出问题,方便下一层网络的学习;② tanh导数范围在(0, 1)之间,相比sigmoid的(0, 0.25),梯度消失(gradient vanishing)问题会得到缓解。缺点:① 计算复杂,幂运算仍然存在;② 还是没有改变Sigmoid函数由于饱和性产生的梯度消失问题。
-
ReLU激活函数——Rectified Linear Unit,修正线性单元函数,通常指代以斜坡函数及其变种为代表的非线性函数。今年较受欢迎的激活函数,无饱和区、收敛快、计算简单,但有时候会比较脆弱(变量更新太快时,最佳值还没找到,就进入小于零的分段就会使梯度变为零,无法更新)。
优点:① 解决了梯度消失问题,但要防范ReLU梯度爆炸。② ReLU摒弃了复杂的运算,值判断输入是否大于0,提高了运算速度。③ 收敛速度远远大于Sigmoid和Tanh函数,可以加速网络训练。缺点:① 由于负数部分恒为0,某些神经元无法激活,导致相应参数不会更新。② 输出不是以0位中心。
-
Sigmoid、Tanh、ReLU的区别:
① Sigmoid和tanh的特点是将输出限制在(0,1)和(-1,1)之间,说明Sigmoid和tanh适合做概率值的处理,例如LSTM中的各种门,而ReLU就不行。
② 为ReLU无最大值限制,可能会出现很大值。
同样,根据ReLU的特征,Relu适合用于深层网络的训练,而Sigmoid和tanh则不行,因为它们会出现梯度消失。 -
Leaky ReLU激活函数——为了防止模型‘Dead’情况,将x<0部分并没有直接置为0,而是给一个很小的负数梯度值a常数,一般设置为0.01,Leak ReLU函数效果好但不稳定,所以实际运用少。
Leaky ReLU特点:Leaky ReLU 主要是为了避免梯度消失,当神经元处于非激活状态时,允许一个非0的梯度存在,这样不会出现梯度消失,收敛速度快。他的优缺点和ReLU类似。但实际操作效果并没有总是比ReLU好。