李宏毅深度学习--《深度学习的简单介绍》+《为什么要做“深度”学习》

一、深度学习的简单介绍

Deep Learning的三个步骤:

  • − S t e p 1 − : d e f i n e   a   s e t   o f   f u n c t i o n -Step1-:define\ a\ set\ of\ function Step1define a set of function(给出一个 n e t w o r k   s t r u c t u r e network\ structure network structure就相当于定义了一个函数集合)

  • − S t e p 2 − : g o o d n e s s   o f   f u n c t i o n - Step2-:goodness\ of\ function Step2goodness of function

  • − S t e p 3 − : p i c k   t h e   b e s t   f u n c t i o n - Step3-:pick\ the\ best\ function Step3pick the best function


全连接层前馈网络 ( F u l l y   C o n n e c t   F e e d f o r w a r d   N e t w o r k ) (Fully\ Connect \ Feedforward\ Network) (Fully Connect Feedforward Network)

接收输入数据的第 0 0 0层称为输入层,中间由很多neuron组成的层称为隐藏层,输出结果的第 L L L层称为输出层

在这里插入图片描述


矩阵运算 ( M a t r i x O p e r a t i o n ) (Matrix Operation) (MatrixOperation)

在神经网络中一般采用矩阵运算,不仅方便表示,还能加速运算。第 1 1 1层输出的矩阵运算如下图所示:
(假设激活函数 σ σ σ使用的是 s i g m o i d sigmoid sigmoid)
在这里插入图片描述

将各层的参数都进行向量化,神经网络的前向传播做的其实就是很多的矩阵运算,如下图:

在这里插入图片描述

W 1 、 b 1 W^1、b^1 W1b1表示第 0 0 0层(输入层)和第 1 1 1层之间的权重和偏置的向量化表示。

1 1 1层的的输出 a 1 a^1 a1的表达式为:
a 1 = σ ( W 1 ⋅ x + b 1 ) a^1=σ(W^1\cdot x+b^1) a1=σ(W1x+b1)

同理第 2 2 2 a 2 a^2 a2的输出为:
a 2 = σ ( W 2 ⋅ a 1 + b 2 ) = σ ( W 2 ⋅ σ ( W 1 ⋅ x + b 1 ) + b 2 ) a^2=σ(W^2\cdot a^1+b^2)=σ(W^2\cdot σ(W^1\cdot x+b^1)+b^2) a2=σ(W2a1+b2)=σ(W2σ(W1x+b1)+b2)

依此类推,第L层的输出为:
a L = σ ( W L ⋯ σ ( W 2 ⋅ σ ( W 1 ⋅ x + b 1 ) + b 2 ) + b L ) a^L=σ(W^L\cdots σ(W^2\cdot σ(W^1\cdot x+b^1)+b^2)+b^L) aL=σ(WLσ(W2σ(W1x+b1)+b2)+bL)

在做这些矩阵运算的时候,就可以通过GPU来进行计算,加速运算过程。


将输出层作为多元分类器

此时的输入的 X X X是待分类对象的 f e a t u r e s features features;中间隐藏层做的工作是接收前一层的特征输入并提取/转换特征作为下一层的输入;最后一层接收的结果是通过提炼的、抽象的 f e a t u r e s features features,通过一个简单的 s o f t m a x softmax softmax输出分类结果。

在这里插入图片描述

以手写数字识别为例子,如下图:
在这里插入图片描述

16 × 16 16\times16 16×16的图片平铺展开成256维度的向量作为神经网络输入的 f e a t u r e s features features,最后输出层经过 s o f t m a x softmax softmax函数输出 10 10 10个概率值作为输出,选中其中概率最大的作为分类结果。


goodness of function

确定 n e t w o r k   s t r u c t u r e network\ structure network structure后,如何定义一个好的 f u n c t i o n function function呢?

在分类问题中一般常用交叉熵作为损失函数,交叉熵是比较两个不同分布模型(理想模型和现实模型)之间距离的度量。

如下图,神经网络通过前向传播输出预测结果 y y y,使用交叉熵来判断预测结果 y y y和实际结果 y ^ \hat{y} y^之间还有多少“距离”。

在这里插入图片描述

交叉熵表达式为:
l ( y , y ^ ) = − ∑ i = 1 10 y ^ i ⋅ l o g   y i l(y,\hat{y})=-\sum\limits_{i=1}^{10} {\hat{y}_i\cdot log\ y_i} l(y,y^)=i=110y^ilog yi

然后对每个训练样本的Loss求和,计算整体的损失 L o s s Loss Loss

在这里插入图片描述

整体损失函数值 L L L表达式为:
T o a l   L o s s = L = ∑ n = 1 N l n Toal \ Loss=L=\sum\limits_{n=1}^{N} {l^n} Toal Loss=L=n=1Nln

后面的事情就是使用 g r a d i e n t   d e s c e n d gradient\ descend gradient descend来找到使 L L L最小化的参数。


二、为什么要做“深度”学习?

参数一样的情况下,让模型更“高”比更“宽”更有用

如下面两个图,左边的模型结构宽而短,右边的模型窄而高。为什么参数相同的情况下右边的模型会更好一些呢?

在这里插入图片描述

这就像平时在写的程序,我们不会将所有功能实现都放在 m a i n   f u n c t i o n main\ function main function中。我们会更愿意将功能模块化( m o d u l a r i z a t i o n modularization modularization),如下图:

在这里插入图片描述
结构化的编程的好处是很多函数都可以重复使用,深层的功能实现也能很好的调用浅层的功能。

m o d u l a r i z a t i o n modularization modularization的概念带入到神经网络实例中去,假设我们要对图片进行分类,分出长头发女生、长头发男生、短头发男生、短头发女生4各类别。数据集情况如下图所示:
在这里插入图片描述

当使用窄而宽的神经网络直接去训练这个分类器时,长头发男生训练样本太少,那么分类器对长头发男生的分类效果就会很差。
在这里插入图片描述

我们使用 m o d u l a r i z a t i o n modularization modularization将这个问题分成两个 B a s i c   C l a s s i f i e r Basic\ Classifier Basic Classifier:是男孩还是女孩、长头发还是短头发。
在这里插入图片描述
这样这两个子分类问题训练样本都比较充足;再将这两个问题的结果用于训练分类器分类,这样长头发男生虽然数据较少,但是也能获得比较好的分类结果。

在这里插入图片描述

综上所述,当我们使用窄而高的模型进行分类时,就类似是将问题分解成了几个小问题,再用子问题的有用信息去解决更复杂的信息。

如下图所示,第一层可以看成 T h e    m o s t    b a s i c    c l a s s i f i e r s The\ \ most\ \ basic\ \ classifiers The  most  basic  classifiers(最基本的分类子问题),第二层就会使用第一层的子问题的分类结果去解决更复杂的 b a s i c   c l a s s i f i e r s basic\ classifiers basic classifiers问题。

在这里插入图片描述

所以在做Deep learning解决问题时,就是将问题模块化的过程,而如何模块化是机器自动从数据中学习到的。


Universality Theorem
存在一个理论:
当隐藏层的的神经节点足够的多,任何连续函数( c o n t i n u o u s   f u n c t i o n continuous\ function continuous function) f f f:
f : R N → R M f:R^N →R^M f:RNRM

都能被只有一个隐藏层的1神经网络学习到。

是的,短而宽的神经网络能够表示任何的函数;但是,使用窄而宽的深层结构会更有效率

就像逻辑电路( l o g i c a l   c i r c u i t logical\ circuit logical circuit),逻辑电路由一个一个的门( g a t e gate gate)组成。两层的 g a t e gate gate就能够代表任何的布尔函数( B o o l e a n   f u n c t i o n Boolean\ function Boolean function);但是使用更多层的逻辑门去建立这些布尔函数会更简单、更加有效率。

具体例子,若想要构建一个奇偶校验的逻辑电路,如下图:
在这里插入图片描述
仅使用两层逻辑电路对 d d d个序列数进行奇偶校验,需要 O ( 2 d ) O(2^d) O(2d)数量级的 g a t e gate gate;而使用深层的逻辑电路来表示,仅需要 O ( d ) O(d) O(d)数量级的 g a t e gate gate就能表示。如下图,三个 g a t e gate gate就能进行奇偶校验:
在这里插入图片描述

所以当我们使用 D e e p    l e a r n i n g Deep\ \ learning Deep  learning时,相比一层隐藏层的神经网络可以使用相对更少的神经节点,从而使用更少的参数,一方面避免了过拟合,另一方面可以使用更少的数据去训练模型


端到端学习 ( E n d − t o − e n d   L e a r n i n g ) (End-to-end\ Learning) (Endtoend Learning)

当我们使用 D e e p   L e a r n i n g Deep\ Learning Deep Learning后,我们就可以使用端到端的学习;使用一个深层神经网络来省略复杂繁琐的人工操作。

什么是 E n d − t o − e n d   L e a r n i n g End-to-end\ Learning Endtoend Learning看这个链接


Deep Learning 能够解决复杂的任务

  • C o m p l e x   T a s k 1 Complex\ Task1 Complex Task1:相似的输入,不同的输出;
    在这里插入图片描述

  • C o m p l e x   T a s k 2 Complex\ Task2 Complex Task2:不同的输入,相似的输出;
    在这里插入图片描述

举一个语音识别的例子,收集了多个不同人说同一句话的语音,并降维到二维上进行可视化。如下图,相同颜色的代表同一个人说的语音,可以看同一句话被不同的人说都会有很大的差异。
在这里插入图片描述
将上述式子输入到训练好的 D e e p   L e a r n i n g Deep\ Learning Deep Learning模型中,输出第 8 8 8层的输出:
在这里插入图片描述
神奇的事情发生了,不同人的同一句话的语音变得十分的相似。


三、总结

  • D e e p   L e a r n i n g Deep\ Learning Deep Learning自动的对问题进行模块化;
  • 参数一样的情况下,让模型更“高”比更“宽”更有用;
  • 使用“深度”学习会更有效率;
  • D e e p   L e a r n i n g Deep\ Learning Deep Learning 能够解决复杂的任务。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值