李宏毅机器学习课程笔记3:Backpropagation、"Hello world" of Deep Learning、Tips for Training DNN



台湾大学李宏毅老师的机器学习课程是一份非常好的ML/DL入门资料,李宏毅老师将课程录像上传到了YouTube,地址:NTUEE ML 2016
这篇文章是学习本课程第7-9课所做的笔记和自己的理解。


Lecture 7: Backpropagation

神经网络可能有百万数量级的参数,为了在梯度下降时有效地计算梯度,使用反向传播。
BP
下面只考虑一笔data对参数的偏微分。

BP

根据链式法则, ∂C∂w=∂z∂w∂C∂z” role=”presentation” style=”position: relative;”>Cw=zwCz∂C∂w=∂z∂w∂C∂z 称为后向过程。

前向过程

前向过程:∂z∂wi=” role=”presentation” style=”position: relative;”>zwi=∂z∂wi=

后向过程

后向过程:根据链式法则, ∂C∂z=∂a∂z∂C∂a” role=”presentation” style=”position: relative;”>Cz=azCa∂C∂z=∂a∂z∂C∂a
BP
BP

从另一观点看待上面的式子:有另外一个neuron(下图中的三角形,表示乘法/放大器),input是∂C∂z′” role=”presentation” style=”position: relative;”>Cz∂C∂z′
BP

现在的问题是,如何计算∂C∂z′” role=”presentation” style=”position: relative;”>Cz∂C∂z′
第一种情况,z′,z″” role=”presentation” style=”position: relative;”>z,z′′z′,z″ 所接的neuron是output layer的neuron。
BP

第二种情况,z′,z″” role=”presentation” style=”position: relative;”>z,z′′z′,z″ 所接的neuron不是output layer的neuron。
BP

∂C∂z′=σ′(z′)[w5∂C∂za+w6∂C∂zb]” role=”presentation” style=”text-align: center; position: relative;”>Cz=σ(z)[w5Cza+w6Czb]∂C∂z′=σ′(z′)[w5∂C∂za+w6∂C∂zb]

实际上在做Backword Pass的时候,建立一个反向的neural network:
BP

总结

BP
梯度下降时需要计算每笔data的Cost对参数的偏微分∂C∂w” role=”presentation” style=”position: relative;”>Cw∂C∂w 只有一个所指的neuron。
链式法则将计算∂C∂w” role=”presentation” style=”position: relative;”>Cw∂C∂w 拆成前向过程与后向过程。
前向过程计算的是∂z∂w” role=”presentation” style=”position: relative;”>zw∂z∂w 相连的值。
后向过程计算的是∂C∂z” role=”presentation” style=”position: relative;”>Cz∂C∂z 所指neuron的input,计算结果通过从后至前递归得到。

Lecture 8: “Hello world” of deep learning

Deep Learning的三个步骤

Keras Step 1
使用Keras做MNIST手写字符识别,第一步定义一个function set。

model = Sequential() 宣告一个model

Dense 代表全连接层

第一个隐层需要设置输入维度、输出维度,之后各层只需设置输出维度

Keras Step 2
第二步,确定损失函数。图上选的是交叉熵。

Keras Step 3
第三步,训练。
adam可由机器自己设置学习率。
x_train 与 y_train 都是numpy array.

在已知标签的测试集上测试,与在无标签的测试集上测试:
testing

mini-batch 与 epoch

mini-batch与epoch的概念,注意每个batch中的examples都是随机的:
mini-batch
如果batch_size = 1, 则为SGD。
如果batch_size = # training data, 则为(Full Batch) Gradient Descent.
Batch Size会影响训练速度和训练结果,需要tune。

以50000 examples为例,
batch size = 1时,每个epoch更新50000次,用时166s;
batch size = 10时,每个epoch更新5000次,用时17s.
二者在170内都做~5W次更新,且batch size = 10时更稳定。
但是,GPU的平行计算有限度,不能把batch size开得太大。而且Full Batch容易陷入局部最优值。

这里写图片描述
上面做一次矩阵乘法,和下面做一次矩阵乘法,GPU所花时间一样。

有一招叫做Shuffle,在Keras中是默认的,意思是:在各个epoch中每个batch的组成是不一样的。

分析结果

对第一个隐层的neuron,可将其weights排成image:
analysis
还有一种分析方法,每个隐层的output都是高维向量,将高维向量降维成二维平面上的点,并保持距离关系(在高维空间中远,则在二维空间中也远)。
analysis
可见,数字分得越来越开。最后的隐层的输出就是得到的feature,分得很开。尽管最后的output layer是线性模型,也可以把数字都分开。

Lecture 9: Tips for Training DNN

明确流程

recipe

判断overfitting需要看两个数据集上的结果(training set → good, testing set → bad)。
在试图解决overfitting之后仍要再看一下training set上的结果!

不能看见所有不好的performance都归因到overfitting。如只看下右图,不能断言56-layer有overfitting,要看training set上的表现。根据下左图,可以发现原因是train的时候没有train好(也不能叫underfitting,underfitting:参数不够多,模型能力不足)。
Not Well Train

对症下药

在读到deep learning的方法时,要思考该方法是解决什么问题。是解决training set上的performance不好,还是解决testing set上的performance不好。比如,Dropout是为了解决testing set上结果不好的问题,如果是training set上结果不好而用Dropout,不会有好的结果。
解决方法与对应的问题:
recipe

New activation function (for good results on training data)

MNIST手写数字识别,激活函数用sigmoid,training data上的accuracy与层数的关系曲线:
这里写图片描述
层数>7时,performance下降,原因不是overfitting! train的时候就没train好。

梯度消失的问题:
vanishing gradient
用sigmoid会出现梯度消失的问题(参数的变化经过sigmoid会逐层衰减,对最后的loss影响很小),改用ReLU(计算快,相当于无数sigmoid叠加,解决梯度消失问题)。
ReLU输出0或x,输出0的ReLU神经元相当于不存在,网络变得瘦长,但是整个网络仍然是非线性的,只有当input改变十分微小的时候才是线性的,因为input不同,输出为0的ReLU神经元也不同。

ReLU是Maxout的特例,Maxout可以学出激活函数。
maxout

Adaptive Learning Rate (for good results on training data)

RMSProp

RMSProp
α” role=”presentation” style=”position: relative;”>αα 小,则倾向于相信新的gradient。

Momentum

Momentum

Adam

Adam

Early Stopping (for good results on testing data)

这里的testing set指的是有label的testing set。
如果learning rate设得对的话,training set的loss会逐渐降低,而testing set与training set可能分布不同,所以testing set的loss可能先降后升,这时就不要一直train下去,而是要在testing loss最小的地方停止train。这里的testing set 实际指的是validation set。
early stopping

Regularization (for good results on testing data)

L2正则化

L2
L2正则化让function更平滑,而bias与函数平滑程度没有关系。

参数更新:
L2 update
正则化在NN中虽有用但不明显。
NN参数初始值一般接近0,update参数即是要参数原理0。L2正则化(让参数接近0)的作用可能与early stopping类似。

L1正则化

L1
L1 update的速度是|ηλ|” role=”presentation” style=”position: relative;”>|ηλ||ηλ| 很大,那么改变量也很大)。
用L1做training,结果比较sparse,参数中有很多接近0的值,也有很多很大的值。
L2 learn的结果:参数值平均来讲比较小。

Dropout (for good results on testing data)

dropout
input layer中每个element也算是一个neuron.
每次更新参数之前都要resample.
用dropout,在training上的结果会变差,但在testing上的结果会变好。

dropout
在testing的时候不做dropout,所有neuron都要用。
如果training时dropout rate = p%, 得参数a, 那么testing时参数a要乘(1 - p%).

Dropout是ensemble的一种方式。
ensemble
一个复杂model, bias准,但variance大,把多个复杂model ensemble起来,variance变小。
每个dropout后的结构由一个batch来train,但是权重是共享的,每个权重是由多个batch 来train的。

ensemble
在testing的时候,把多个结构的结果取平均,与把所有参数乘以(1 - p%),效果是近似的。
Dropout用在ReLU、Maxout上效果较好。


李宏毅机器学习课程笔记

李宏毅机器学习课程笔记1:Regression、Error、Gradient Descent
李宏毅机器学习课程笔记2:Classification、Logistic Regression、Brief Introduction of Deep Learning
李宏毅机器学习课程笔记3:Backpropagation、”Hello world” of Deep Learning、Tips for Training DNN
李宏毅机器学习课程笔记4:CNN、Why Deep、Semi-supervised
李宏毅机器学习课程笔记5:Unsupervised Learning - Linear Methods、Word Embedding、Neighbor Embedding
李宏毅机器学习课程笔记6:Unsupervised Learning - Auto-encoder、PixelRNN、VAE、GAN
李宏毅机器学习课程笔记7:Transfer Learning、SVM、Structured Learning - Introduction
李宏毅机器学习课程笔记8:Structured Learning - Linear Model、Structured SVM、Sequence Labeling
李宏毅机器学习课程笔记9:Recurrent Neural Network
李宏毅机器学习课程笔记10:Ensemble、Deep Reinforcement Learning

文章转载处:https://blog.csdn.net/xzy_thu/article/details/69680951

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
李宏毅的2020机器学习笔记中,有一个关于注意力机制(Attention)的部分。这部分内容主要介绍了生成模型(Generation)、注意力(Attention)、生成的技巧(Tips for Generation)以及指针网络(Pointer Network)。在生成模型中,主要讲述了如何生成一个有结构的对象。接下来介绍了注意力机制,包括一些有趣的技术,比如图片生成句子等。在生成的技巧部分,提到了一些新的技术以及可能遇到的问题和偏差,并给出了相应的解决方案。最后,稍微提到了强化学习。其中还提到了在输出"machine"这个单词时,只需要关注"机器"这个部分,而不必考虑输入中的"学习"这个部分。这样可以得到更好的结果。另外,还提到了关于产生"ei"的方法,其中有研究应用了连续动态模型自注意力(Self-attention)来学习位置编码的方法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [2020李宏毅机器学习笔记-Condition Generation by RNN&Attention](https://blog.csdn.net/zn961018/article/details/117593813)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [李宏毅机器学习学习笔记:Self-attention](https://blog.csdn.net/weixin_44455827/article/details/128094176)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值