Deep Learing
Step1、define a set of function(其实就是Neural Network)
Step2、goodness of function
Step3、pick the best function
deep = Many hidden layers
普遍性定理:
一个N维向量只需要一个隐藏层就可以转为M维向量,只要给与足够的隐藏神经元。
Backpropagation 反向传播
如果要处理一个音频,它可能有上百万维组成,name对这个向量进行求偏微分得到的gradient也是百万维级别的,显然直接求导是工作量巨大的,这时候我们可以使用反向传播来解决这个问题。
反向传播也是Gradient Desencent,它只是一个好的计算方法。
我们设y^n\hat{y}^ny^?n是实际的结果,那么通过计算输入xnx^nxn经过神经元得到的yny^nyn与实际结果之间的距离差距记作CnC^nCn,将CnC^nCn累计求和就得到了Loss Function。此模型就是要通过不断的计算得到合适的一系列w和b,从而得到适合此测试数据集的神经网络。
通过链式规则,得到下式,此时我们进行计算?z?w\frac{\partial z}{\partial w}?w?z?是正推法、?C?z\frac{\partial C}{\partial z}?z?C?是逆推法
显然,?z?w\frac{\partial z}{\partial w}?w?z?得到的结果就是输入的x,即经过一层神经层的结果对权值进行求导,得到的结果是输入值【由权重连接的输入值】
*** 计算?C?z\frac{\partial C}{\partial z}?z?C?**
?C?z=?a?z?C?a?\frac{\partial C}{\partial z} = \frac{\partial a}{\partial z}\frac{\partial C}{\partial a}? ?z?C?=?z?a??a?C??
其中,输入z,通过激活函数sigmoid得到输出a,因此上式中,前者其实就是sigmoid求偏微分。函数图形见下图。
计算?C?a\frac{\partial C}{\partial a}?a?C?
我们知道,C是距离实际的距离,因此每一个输出z′、z′′z^{'}、z^{''}z′、z′′都会影响到C,而每一个输出都是由输入a影响得到的(当然,这个a是z的输出),因此可以有下面的链式规则
当然,图中只有两项,若有N个神经元,则此链式规则应有N项
显然,?z′?a\frac{\partial z^{'}}{\partial a}?a?z′? = w3w_3w3? 、 ?z′′?a\frac{\partial z^{''}}{\partial a}?a?z′′? = w4w_4w4? 问题转换为求每项的后面的偏微分。
假设我们已经算出了 ?C?z′\frac{\partial C}{\partial z^{'}}?z′?C? 、?C?z′′\frac{\partial C}{\partial z^{''}}?z′′?C?
那么我们就可以得到?C?z\frac{\partial C}{\partial z}?z?C?
? 图1
Backpropagation - Backward pass
如果存在这样的neural:
输入是**?C?z′\frac{\partial C}{\partial z^{'}}?z′?C? 、?C?z′′\frac{\partial C}{\partial z^{''}}?z′′?C?** ,σ′(z)\sigma^{'}(z)σ′(z)是常数【因为z已经在正向传递中确定了】
输出就可以是**?C?z\frac{\partial C}{\partial z}?z?C? **。【这个假设为了方便理解下面的情况2】
那我们继续接着图1的算式进行最后两项的计算。需要分情况讨论
Case1、Output Layer
其中**?C?y1\frac{\partial C}{\partial y_1}?y1??C? 、?C?y2\frac{\partial C}{\partial y_2}?y2??C??**是可以简单计算得到的。因为C可以是y通过交叉熵或者其他方法得到的。而y对z的偏微分则是图中红色的neural,它是已知的。
Case2、Not Output Layer
就是上图中,红色的neural后面并不是输出层,而是还有其他的东西.
我们可以按照上面的思路,前面的偏微分永远可以通过后面的偏微分计算获得,也就是相当于每次计算的时候,相当于假设前面的偏微分是已知的。那么直到递归到最后的输出层,就全都已知了。