李宏毅机器学习Task4打卡

深度学习的历史:
1958年,提出了perceptron的概念(线性模型)
1969年,写了一本书,表示线性模型有很多干不成的事情
1980年,提出了multi-layer perceptron的概念(和当前的深度学习没有多少本质差别)
1986年,提出了backpropagation的概念(但存在一个瑕疵,就是3个图层就训练不出好的结果)
1989年,有学者发现只需要一个layer就已经可以训练出所有的function了,不需要叠很多layer
2006年,提出了深度学习(deep learning)的概念
2009年,GPU被应用
2011年,开始广泛应用在语音识别
2012年,开始举办图像相关的比赛

在deep learning中,定义的那个function 其实就是neural network(神经网络)。
image

神经网络是什么呢?
将多个神经元通过一定的方法连到一起,就得到了这个神经网络。
image
可以用不同的方法去连接这些神经网络,就能得到不同的结构。而这个神经网络中,又有大量的逻辑函数,每个逻辑函数都有自己的权重(weights)和偏移量(biases),这些权重和偏移量就是这个神经网络的参数。

而如何连接他们呢?最常用的连接方式是叫”fully connect feedforward network“(全连接前馈神经网络)
将这些神经元排成一排一排的,如下图:
image
每组神经元都有自己的权重和偏移。
这样在计算后,通过sigmoid 函数后,可以得到自己的值,注意:
Sigmoid函数是一个在生物学中常见的S型函数,也称为S型生长曲线。 在信息科学中,由于其单增以及反函数单增等性质,Sigmoid函数常被用作神经网络的阈值函数,将变量映射到0,1之间。

通过反复的计算后,可以得到下图:
image

所以可以把一整个网络,看作是一个整体的function。

如果这些神经元还没有构建参数,只是确认了他们是如何连接的,那么就相当于定义了一个function set。
image

fully connect feedforward network的每一组layer中的神经元都是两两互相连接,而且是从后向前传,所以是“全连接前馈神经网络“
image

输入的layer,叫做input layer, 输出的layer就叫做,output layer。其余部分的layer,叫做hidden layer。

所谓的deep,就是很多的hidden layer。

神经网络的运作,我们常常会用矩阵运算(matrix operation)的方法来表示。
就像把每个输入、权重、偏移量等都写成一个个矩阵,如下图:
image

所以把第一个layer的权重和偏移都集合成w1,b1,第N个layer的权重和偏移都集合成wn和bn。输入为x,则输出y为下图:
image
image
矩阵运算的好处是可以使用GPU来进行运算。

例如,输入一个16*16的图:
那么输入就会被处理为256维的矩阵,输出的话可能是10维数组,每个代表着是1,2,3…0的可能性。如下图:
image

所以我们唯一需要的就是一个function(就是一个神经网络)。让输入时256维,输出是10维,那么那个神经网络就可以作为图像辨识数字的函数。除了输出输入外,hidden layer的数量以及每个layer中每个神经元的数量是没有限制的,需要从实践和经验中获得。

第二步:定义一个function的好坏:
计算target和output之间的交叉熵(cross entropy)
image
其中的data是有很多的,将所有的交叉熵求和,然后找一组function,可以使得交叉熵最小。方法呢,就是gradient descent。
image

现在算微分有很多现成的方法,如下图:
image

反向传播(backpropagation)

梯度下降的方法思路,就是通过偏微分,不断的更新参数,直至找到最好的(或局部最好)的参数,可以使loss最小。
image
而机器学习中的参数,有太多太多,难以计算。而反向传播,就是一种计算这些参数的梯度下降的方法。

Chain Rule(链式求导):
image

Loss的函数如下:
image
而通过对一个参数求偏导,可以得到下面这个式子:
image

所以,我们只需要计算某一笔data的对w偏导,在和所有的data偏导相加就可以。即对于L(θ)就是所有ln的损失之和,所以如果要算每个L(θ)的偏微分,我们只要算每个ln的偏微分,再把所有ln偏微分的结果加起来就是L(θ)的偏微分,所以等下我们只计算每个ln的偏微分。

以一个神经元为例;
image
其中:
image
规律就是看那个参数后面的变量是啥,那么对于那个参数的偏微分就是那个变量。
image
上面那些步骤,就是forward pass

而下面是backward pass
image

image

而怎么计算C对z`和z``的偏导呢?
假设红色的layer就是output layer。
那么就会有:
image

而如果红色的layer 不是output layer:
image
从后向前推,就可以知道C对z`的偏微分。这样的话,从output layer开始算,向前递归,就能够得到前一层,得到前一层的结果,就能够算出前两层的结果,以此类推。

所以从后向前推,计算量并没有增加。
image

本质就是建立一个反向的神经网络,只不过里面的参数,需要正向的计算后才能得到。然后从后向前求偏微分就可以。

浙ICP备19012682号