李宏毅机器学习Task04

李宏毅机器学习Task04

本次任务关注的是机器学习中的深度学习情景,我并非计算机专业,不过偶然去图书馆时经常能看到神经网络的书,本次任务之后,也算是明白了深度学习其实就是神经网络的另一个“马甲”。

深度学习

本次任务基本就是简单介绍了一下深度学习,以及后续的反向传播机制,总体上的感觉就是原理上不难,但是十分复杂,有工程问题的显著特征。

深度学习的历史

虽然深度学习是一个比较时髦的概念,但是这个概念其实一点都不新。同时它也经历过几度浮沉才到了如今比较火热的局面。

  • 1958年感知器技术作为一项全新技术加上各路人士炒作,业界引起了轩然大波。在大家发觉了它的限制所在之后,之前的吹嘘也如泡沫般破裂。
  • 1980年代多层感知器技术被提出,也同样引起了大家的关注,这时技术原理与如今的DNN深度神经网络已无原理上的差异。可是命运亦如单层感知器一般,被发现问题后,声名狼藉。
  • 2006年RBM初始化的提出,为之前的技术改换“深度学习”的马甲,RBM初始化技术本身特别复杂,后续的运用其实并不多,但是作为抛砖引玉的“砖”让人们重新关注了这项技术。
  • 2009年之后GPU计算速度变强之后,人们在语音识别和图像识别领域运用神经网络大方异彩,自此,深度学习火热到今天。

深度学习的一般步骤

用概括性的文字来说,深度学习的步骤与之前的机器学习其实一样,都是建立模型,评估模型,挑最好的模型,这里我们一步一步说。

建立模型

对于深度学习而言,就是建立神经网络模型,在这个神经网络里面,我们有很多逻辑回归函数,我的理解就是这些一个个函数可以看作一个节点,其中每个逻辑回归都有自己的权重和自己的偏差,这些权重和偏差就是参数。

节点的连接

这些神经元节点的连接方式是我们建立模型的关键,课上,老师用了比较简单的完全连接前馈神经网络来举例。如图片所示,输入输出单列,中间的就是一个一个的神经元节点。
前馈(feedforward)也可以称为前向,从信号流向来理解就是输入信号进入网络后,信号流动是单向的,即信号从前一层流向后一层,一直到输出层,其中任意两层之间的连接并没有反馈(feedback),亦即信号没有从后一层又返回到前一层。
在这里插入图片描述
我们也可以自己设计一些网络结构,搜集了一些资料一些比较著名的神经网络就有:

  • 卷积神经网络
  • 图卷积神经网络
  • 循环神经网络
层数的选取

直观的,比如说,我的神经元要多少层,每一层有多少个节点比较合适?很明显,神经元层数越多,带来的准确性就越大,从李老师上课举的例子看,2015年的一个残差网络有着152层神经元,图像识别最后的错误率低至3.57%,更多的层数往往意味着更复杂的运算,于此,我们亦需取舍。

评估模型

对于模型的评估,我们一般采用损失函数来反应模型的好差,所以对于神经网络来说,我们采用交叉熵​的损失进行计算,接下来我们就是调整参数,让交叉熵越小越好。
交叉熵函数: C = − [ y l n y ^ + ( 1 − y ) l n ( 1 − y ^ ) ] C=-[yln\widehat{y}+(1-y)ln(1-\widehat{y})] C=[ylny +(1y)ln(1y )]
对于损失,我们不单单要计算一笔数据的,而是要计算整体所有训练数据的损失,然后把所有的训练数据的损失都加起来, L = ∑ C L=\sum C L=C得到一个总体损失L。接下来就是在模型里面找到一组函数能最小化这个总体损失L,或者是找一组神经网络的参数 θ \theta θ,来最小化总体损失L。

挑选模型

选用的原理依然是梯度下降法,不过根据链式求导法则,优化了算法,采用了反向传播机制。梯度下降这里不再赘述,主要学习反向传播机制。

反向传播
链式求导法则

复习一下高数中的链式法则知识。
我们有函数 x = ϕ ( s ) x=\phi(s) x=ϕ(s) y = ψ ( s ) y=\psi(s) y=ψ(s) Z = f ( x , y ) Z=f(x,y) Z=f(x,y),那么有
d z / d s = ∂ z ∂ x d x d s + ∂ z ∂ y d y d s dz/ds=\frac{\partial{z}}{\partial{x}}\frac{dx}{ds}+\frac{\partial{z}}{\partial{y}}\frac{dy}{ds} dz/ds=xzdsdx+yzdsdy
由此,我们的损失函数的微分(以对w举例)可以划为:
∂ l ∂ w = ∂ l ∂ z ∂ z ∂ w \frac{\partial{l}}{\partial{w}}=\frac{\partial{l}}{\partial{z}}\frac{\partial{z}}{\partial{w}} wl=zlwz

前向传播 ∂ z ∂ w \frac{\partial{z}}{\partial{w}} wz部分

这一部分的计算比较简单,我们可以直接看出这一部分的值其实就是输入的值,从图片上更直观可以看出。
在这里插入图片描述

反向传播 ∂ l ∂ z \frac{\partial{l}}{\partial{z}} zl部分

这一部分的计算就比较复杂,我个人感觉里面应该涉及到一些递归调用的知识。再次利用链式法则
∂ l ∂ z = σ ′ ( z ) [ w 3 ∂ l ∂ z ′ + w 4 ∂ l ∂ z ′ ′ ] \frac{\partial{l}}{\partial{z}}=\sigma'(z)[w_3\frac{\partial{l}}{\partial{z'}}+w_4\frac{\partial{l}}{\partial{z''}}] zl=σ(z)[w3zl+w4zl]
可以从另外一个角度看这个事情,现在有另外一个神经元,把forward的过程逆向过来,其中 σ ′ ( z ) \sigma'(z) σ(z)是常数,因为它在向前传播的时候就已经确定了。依据位置不同,我们再次分类讨论。

  • 输出层
    假设 ∂ l ∂ z ′ \frac{\partial l}{\partial z'} zl ∂ l ∂ z ′ ′ ​ \frac{\partial l}{\partial z''}​ zl 是最后一层的隐藏层 也就是就是y1与y2是输出值,那么直接计算就能得出结果.
  • 不为输出层
    如果不为输出层,那么就要继续利用链式法则求导下去,最后还是会摸到最后一输出层数据。
    在这里插入图片描述
    反向传播是从反方向计算损失函数的偏微分值,接着我们就可以得到神经网络中所有的参数,然后用梯度下降就可以不断更新,得到损失最小的函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值