㈠ 【神经网络原理】如何利用梯度下降法更新权重与偏置
损失函数的值减小,意味着神经网络的预测值(实际输出)和标签值(预期的输出)越接近。
损失函数通常为 多元函数 ,其自变量包括网络中包含的所有的权重w、以及所有的偏置b,有的地方也将其称作代价函数(Cost function)或价值函数(Value function),这里只介绍均方误差损失函数(MSE):
多元函数的梯度类似于一元函数导数 :对多元函数各变量依次求一阶偏导,然后将各偏导值组合成一个一维列向量,就得到了该多元函数梯度。损失函数通常为 多元函数 ,其梯度如下:
对于神经网络结构 & 符号约定有疑惑的可以参考我的这篇文章—— 【神经网络原理】神经网络结构 & 符号约定
梯度的负方向 :因为梯度是一个向量,具有方向性。这里的 下降 是指损失函数值的减小。
那么为什么沿梯度的负方向损失函数值减小最快呢?这里主要利用 多元函数的一阶泰勒展开 (一阶形式还是比较简单的)和 向量点积公式 来证明:
这里只给出了第 l 层的网络参数——权重(矩阵)与偏置(向量)的梯度下降更新公式,其他层网络参数的更新公式同理可得,对符号有疑惑的请参考: 【神经网络原理】神经网络结构 & 符号约定 。
有了各层网络参数(向量/矩阵)的更新公式,其中损失函数对各参数的梯度又该如何求解呢?事实上由于神经网络中参数(权重W和偏置b)通常较多,要想直接求解损失函数对这些参数的梯度,难度极大,所以在实际训练网络时,我们通常采用 反向误差传播,即BP算法 ,巧妙地利用预测值与标签值的残差,从输出层到输入层反向地求解出损失函数对各层网络参数的梯度。
㈡ 【神经网络原理】神经网络结构 & 符号约定
神经元模型的符号约定:输入: ,权重(weight): ,偏置(bias): ,未激活值: ,激活输出值:
神经元可用于解决部分二分类问题 ——当有一个类别未知的 输入感知机,若 输出值a = 1时,感知机被激活 ,代表 x 属于第一类;若 输出值a = 0时,感知机未激活 ,则代表 x 属于第二类。而对于sigmoid神经元,若输出值a ≥ 0.5时,代表 x 属于第一类,否则为第二类。
不难看出,感知机可以轻松实现“与非”逻辑,而与非逻辑可以组合成其他任意的逻辑,但对于一些过于复杂的问题,我们难以写出其背后地逻辑结构。 这时候神经网络就能大显身手 :它可以自适应的学习规律,调节网络地权重和偏置等参数,我们只需要用大量的数据对其正确地训练,即可得到我们想要的效果!
那有一个很有意思的问题:相比于阶跃函数,为什么我们在神经网络中更愿意采用sigmoid函数作为激活函数呢?
首先,由于感知机的激活函数为阶跃函数(在0处突变),权重的一个小的变化就可能导致输出值的突变,而如果将激活函数替换为sigmoid函数,输出值的变化就能发生相应的小的变化,有利于网络学习;另外,由于采用二次代价函数作为损失函数时,利用BP算法求梯度值需要对冲激函数求导,sigmoid函数正好时连续可导的,而且导数很好求。
为了便于理解,先画一个三层的全连接神经网络示意图,激活函数都选用sigmoid函数。 全连接神经网络 指除输出层外,每一个神经元都与下一层中的各神经元相连接。网络的第一层为 输入层 ,最后一层为 输出层 ,中间的所有层统称为 隐藏层 。其中,输入层的神经元比较特殊,不含偏置 ,也没有激活函数 。
神经网络结构的符号约定 : 代表第 层的第 个神经元与第 层的第 个神经元连线上的权重; 代表第 层与第 层之间的所有权重 构成的权重矩阵。 分别代表第 层的第 个神经元对应的偏置、未激活值、激活值; 则分别代表第 层的所有偏置组成的列向量、所有未激活值组成的列向量以及所有激活值组成的列向量。
下面展示了一个手写体识别的三层全连接神经网络结构:
隐藏层的功能可以看作是各种特征检测器的组合:检测到相应特征时,相应的隐藏层神经元就会被激活,从而使输出层相应的神经元也被激活。