相比于计算机,我更喜爱数学的推导,感觉数学推导是可触摸的更有立体感,甚至你能够追溯到基本。作为神经网络算法的第一篇文章,我决定用 softmax 输入层作为开篇之作。
这篇文章我感觉不错
这篇十分业余
如上图所示是个粗略的神经网络模型,其实就是简略的全连贯神经网络。我明天探讨的只是 output layer,用的是 softmax 层作为神经网络的输入层,所以咱们只须要关注最初一层就行了。
softmax 输入层如下所示:
下方的 [1,2,3,4],代表 softmax 层的四个输出
上方的 [0.03,0.09,0.24,0.64] 代表 softmax 层的四个输入。
十分好了解,输出和输入的关系是怎么样的呢?又有什么样的性质呢?
咱们用数学公式就高深莫测:
这就是 softmax 函数表达式
我本人手写兴许更分明:
是吧高深莫测,更为要害的是性质十分像全概率公式性质。
确实 softmax 最次要的作用,就是将神经网络的输入转化为概率模式。天然咱们想到,神经元的输入值越大,通过输入层转换的概率就越大。那么目标是什么呢??首先咱们须要晓得 softmax 层设计成概率样子,大概率就是为分类服务的。个别 label 有几类,最初的神经元就有几个。通过 one-hot 编码,将 label 变成一个个向量。如果一个神经元通过输入层概率最大,那么改神经元所在的分类就是预测的后果,而后和 lable 值进行比对。统一则分类正确,不统一则分类谬误。
脑筋直的的我层一开始就想,神经元输入最高通过 softmax 层的输入概率就越高,还要 softmax 层干嘛,多此一举。
其实 softmax 层大有玄机,如果没有概率化,模型就是去了纠正错误的迷信方向,没有方法结构损失函数,更不要提优化了。
提到损失函数,那么咱们预测谬误 ‘损失’ 的是什么呢?
引入 损失函数 — 赫赫有名 穿插熵误差函数:
此时的 N 为样本数量,y 代表通过 one-hot 编码后的向量如 [0,1,0,0]
字母 O 为通过 softmax 输入的概率向量如 [0.03,0.09,0.24,0.64]
点积意思是向量对应相乘的和,并未向量相乘。如(y,O)=00.3+10.09+00.24+00.64=0.09
那损失函数到底损失的是什么呢?咱们能够轻松发现,对于一个样本来说如果分类正确且输入概率值越高则向量点积越高,整个损失函数越小。所以,所有样本和最小则整个模型越准确。咱们须要找到适合的神经元参数,使损失函数最小,这个过程咱们叫 优化!
还有一种解释,是依据名称而来,为什么叫穿插熵损失?穿插好了解,点积嘛。这里熵指的是信息熵,这里表达式也是依据信息熵表达式而来,信息熵越小,则取得信息越简略,分类越正确。
开始优化:
首先咱们举个模型来计算优化过程:
如图是一个全连贯神经网络的最初几层模型。
这里要有个习惯就是看到模型向前计算:
z4 = w41o1+w42o2+w43*o3
z5 = w51o1+w52o2+w53*o3
z6 = w61o1+w62o2+w63*o3
z4,z5,z6 代表 456 号神经元输入,作为 softmax 层的输出
那么很容易失去 softmax 函数的输入
a4 = e^z4/(e^z4+e^z5+e^z6)
a5 = e^z5/(e^z4+e^z5+e^z6)
a6 = e^z6/(e^z4+e^z5+e^z6)
咱们以 w41 为例看看误差项(梯度)的传递:
能够看出 w41 的误差延(梯度)图所示方向传递到 Loss 函数,这里最重要一点是,对于 单个样本 误差项(梯度)的传递只通过某一个输入神经元,由 y -label 值决定。比方,y=[1,0,0]那么梯度只通过 a4 神经元不通过 a5,a6。这一点十分重要!
因而咱们以 一个样本 为例反向求 w41 的误差项(梯度):
这里的 loss 函数是广义的损失函数,是单个样本的损失函数。第一项和第三项都十分好求解,留神第一项外面的 i,代表的是 ylabel 向量得第 i 个元素为 1。
重点就只声求解第二项了,依据式子能够凭数学敏感的晓得要分类求解:
第一类:i = 4 如图
求解如图:
第二类:i!=4 如图
求解如图:
综合起来对于 单个样本 梯度为:
看通过如此简单的神经网络、softmax 层、穿插熵损失函数,梯度居然示意一点也不简单仿佛只跟 a4 无关,甚至手动就能实现神经网络的更新如果把它看成概率,就会更好了解。
注意事项:
1、单个样本问题 :有很多教程都不会提到单个样本,上述自己多此提到单个样本条件下计算的后果。后面说过单个样本的损失函数是广义的损失函数,这里更是交叉了一个重要数学根据 — 随机梯度算法 。单个样本好计算好剖析,但不要忘了他可能计算的数学根据就是 随机梯度算法 。单个样本的更新权重,比批度样本效率更高。
2、softmax 输入层的了解:后面也有通俗的提到过他的概率化作用,而我认为更重要的是 为损失函数的建设提供了数学根据 。另外一个作用就是输 出层误差项的正则,只保留分类正确的概率的误差项传递,大大简化误差项的传递。
3、softmax 层和穿插熵损失函数不为一:并不是所有 softmax 层和穿插熵函数都长得一样,学生在查看不同教材就发现了多种不同的写法,但外围步骤保持一致。如图:
所以通知咱们最重要的不是表现形式,而是思维办法!
前面会更新对于 softmax 层解决的代码