原文地址:零基础入门深度学习(3) - 神经网络和反向传播算法
这篇是前三篇和后三篇过渡的分水岭,我也不保证敢说自己也看明白了。一遍看一遍写自己的理解有助于思考。
前面已经学习过了感知器和线性单元,区别主要是激活函数不同。神经网络就是这种小单元按照一定的规则连接起来形成的网络。
神经元
本质上和感知器是一样的,但是感知器的激活函数是分段函数,神经元的激活函数的sigmoid函数或者tanh函数,如图:

计算这个神经元的输出和感知器计算一样,权值,输入相乘相加,作为sigmoid的参数计算输出。
sigmoid函数值域(0,1),是一个非线性的函数

神经网络是啥

如图由多个神经元全连接形成神经网络,全连接说的是下一层和的单个节点和上一层的所有节点都有连接。
最左侧是输入层,中间是隐藏层,可以是很多层,最右边是输出层。神经网络的宽度就是输入输出层向量的长度,深度就是有多少层。节点之间的连线都有一个权值。
计算神经网络的输出
实际上是输入向量到输出向量的一个函数,
给各个节点以及边标上符号,方便说明计算过程,

输入向量的维度必须和输入层的节点数相同,计算a4的值:
式子中的
神经网络的矩阵表示
就说这个网络吧。

这个我觉得使用右乘的方式比较好理解,但是每一次的计算结果都需要做一次转置才好理解。还是参照原文的采用左乘理解。
相同的道理,在计算
嗯,就是这个样子,每次计算完一层的输出就需要扩展一个 1 。
神经网络的训练
神经网络中能够通过训练得来的只有权重,至于网络的深度,连接方式,每层的节点数等,只能是通过人为设定,我们称之为超参数。
神经网络的训练算法反向传播算法(back propagation)

假设每个训练样本为
根据上一节的算法,用样本特征
下面使用
- 输出层节点的误差:
对于节点 i是使用样本
种的特征进行计算输出的结果。当样本为(
输出为
的时候的误差为:
- 隐藏层节点的误差
为节点的输出值,
为下一层节点的权值和误差。例如几点4的误差:
- 更新每个链接的权值
例如这条连接权重的更新
反向传播算法的内容差不多就是这个样子的了,至于推导去看原文吧!这里就不用看了,我们理解了神经网络更重要。上面这三个就死记硬背吧!
梯度检查
用于判断神经网络是否正确。机器学习的套路,首先确定神经网络的目标函数,然后用梯度下降优化算法求目标函数最小的时候的参数值。求解出来的就是参数的调整规则了。
目标函数,好像目标函数都是整个网络中节点的误差,如本文的这个神经网络
梯度检查就是用下面的式子计算梯度和程序计算出整个网络误差对权值的偏导数,然后计算梯度,将此梯度和程序计算出的梯度进行比较,两者相差非常小则说明程序是正确的:
自我感觉梯度就是偏导再乘一个w的极小变化量。
网友评论