深度学习三步曲

李宏毅机器学习——深度学习入门_神经网络

和机器学习类似,也是定义一个函数集、判断函数的好坏以及找到最好的函数。就像把大象放到冰箱一样:把门打开、把大象赶进去、把冰箱门关上。

在第一步中的定义一个函数,该函数就是神经网络。

神经网络

把逻辑回归前后连接在一起,把每个逻辑回归叫做神经元,整个叫做神经网络。

见​​上篇文章​​最后部分

李宏毅机器学习——深度学习入门_梯度下降_02

用不同的方法连接神经元可以得到不同的神经网络,每个逻辑回归都有自己不同的权重(weight)和偏差(bias)。

有不同连接方式,最常见的连接方式是全连接前馈网络(Fully Connect Feedforward Network),如下所示:

李宏毅机器学习——深度学习入门_神经网络_03

每个神经元都有一组权重和偏差。假设上面蓝色的神经元权重是1,-2偏差是1;下面蓝色的神经元权重是-1,1偏差是0。

李宏毅机器学习——深度学习入门_深度学习_04

现在输入是1,-1。第一个蓝色的计算:李宏毅机器学习——深度学习入门_权重_05,代入​​​Sigmoid​​函数的0.98。同理下面蓝色的得出0.12。然后0.98和0.12相当于中间两个红色神经元的输入,假设知道它们的权重和偏差就可以继续计算下去,直到得出最终输出。

李宏毅机器学习——深度学习入门_深度学习_06

如果输入是0,0:

李宏毅机器学习——深度学习入门_梯度下降_07

所以整个神经网络可以看成是一个函数,给定输入,得到输出。
如果还不知道这些神经元的参数,只是定出了结构,把它们连接在一起。其实就是定义了一个函数集,可以给这个网络设不同的参数,就能得到不同的函数。

在这个例子中,我们把神经元分成了三排,每排之间都互相连接。通常,可以把神经网络画成下面这样:

李宏毅机器学习——深度学习入门_梯度下降_08

Layer1的神经元的输出当成Layer2的输入,因为层(Layer)间是每个神经元两两相连,所以叫做全连接。现在传递的方向是Layer1到Layer2、Layer2到Layer3,是由后往前传,所以叫做前馈网络。整个网络的输入是一组向量,对于Layer1来说,每个输入就是这组向量的每个维度。最后LayerL的输出也就是整个网络的输出。这里L层有M个神经元,所以输出是到李宏毅机器学习——深度学习入门_梯度下降_09

要注意的是,输入向量叫做输入层,虽然它没有包含神经元,最后一层L叫做输出层。输出层不是输出向量。

输入层和输出层之间的叫做隐藏层。深度学习中的深度就是指由很多隐藏层。

前馈神经网络是一种最简单的神经网络,各神经元分层排列。每个神经元只与前一层的神经元相连。接收前一层的输出,并输出给下一层.各层间没有反馈。信号从输入层向输出层单向传播,可用一个有向无环图表示。

其实神经网络的运算可以用矩阵操作来描述,如下:

李宏毅机器学习——深度学习入门_神经网络_10

然后通过​​Sigmoid​​​函数(其实这里不一定是​​Sigmoid​​函数,可以换成其他函数)得到0.98和0.12。

李宏毅机器学习——深度学习入门_神经网络_11

假设把第一层的权重全写在一起,当成向量李宏毅机器学习——深度学习入门_神经网络_12,偏差写在一起当成向量李宏毅机器学习——深度学习入门_权重_13;把第二层的权重全写在一起,当成向量李宏毅机器学习——深度学习入门_深度学习_14,偏差写在一起当成向量李宏毅机器学习——深度学习入门_神经网络_15

把整个输入用向量李宏毅机器学习——深度学习入门_梯度下降_16表示,那么输出李宏毅机器学习——深度学习入门_神经网络_17可写成:

李宏毅机器学习——深度学习入门_神经网络_18

李宏毅机器学习——深度学习入门_梯度下降_19得到层1的输出,记为李宏毅机器学习——深度学习入门_神经网络_20,把它当成层2的输入得到层2的输出李宏毅机器学习——深度学习入门_深度学习_21,最后得到整个网络的输出李宏毅机器学习——深度学习入门_神经网络_17

李宏毅机器学习——深度学习入门_深度学习_23可以如下展开:

李宏毅机器学习——深度学习入门_深度学习_24

所以一个神经网络做的事情是一连串的向量乘以矩阵再加上向量,把它们写成矩阵运算可以用GPU加速。

李宏毅机器学习——深度学习入门_权重_25

我们可以把这些隐藏层看成是特征提取器,可以把最后一个隐藏层的输出李宏毅机器学习——深度学习入门_深度学习_26想成是新的特征。
输出层就是多类别分类器,它用的特征是原输入特征经过复杂的转换得到的一组比较好的特征。

判断函数的好坏

李宏毅机器学习——深度学习入门_梯度下降_27

以手写数字识别为例,假设包含数字1的图片有256个像素,作为输入,给定一些参数,得到10个输出(李宏毅机器学习——深度学习入门_神经网络_28),分别对应属于每个数字的概率。我们用这个输出李宏毅机器学习——深度学习入门_神经网络_28和它实际对应的数字李宏毅机器学习——深度学习入门_神经网络_30进行交叉熵就可以判断函数的好坏了。

李宏毅机器学习——深度学习入门_权重_31

训练集中第一笔数据得到的交叉熵是李宏毅机器学习——深度学习入门_神经网络_32,第二笔是李宏毅机器学习——深度学习入门_深度学习_33

把所有的交叉熵累加起来得到损失函数L,然后需要找到函数集中使得损失最小的函数,也就是找到使得损失最小的参数李宏毅机器学习——深度学习入门_梯度下降_34

那么如何找到最小的参数呢,还是使用梯度下降。

李宏毅机器学习——深度学习入门_深度学习_35

首先计算损失函数对每个参数的偏微分,

李宏毅机器学习——深度学习入门_梯度下降_36

然后不断的更新参数。

和机器学习不同,机器学习我们可以手写出梯度下降的过程,但是深度学习的梯度下降比较复杂,一般使用反向传播(Backpropagation)算法来计算参数的偏微分。