背景
在第五期,Datawhale开源项目孵化的《深度学习详解》新书发布之际,通过《深度学习详解》和 李宏毅老师 21年的机器学习课程视频,学习/复习一下 深度学习 的理论。
《深度学习详解》主要内容源于《机器学习》(2021年春),选取了《机器学习》(2017年春)
的部分内容,在这些基础上进行了一定的原创,补充了不少除这门公开课之外的深度学习相关知识。为了尽可能地降低阅读门槛,笔者对这门公开课的精华内容进行选取并优化,对所涉及的公式都给出详细的推导过程,对较难理解的知识点进行了重点讲解和强化,以方便读者较为轻松地入门。
在理论严谨的基础上,本书保留了公开课中大量生动有趣的例子,帮助读者从生活化的角度理解深度学习的概念、建模过程和核心算法细节,包括——
- 卷积神经网络、Transformer、生成模型、自监督学习(包括 BERT 和 GPT)等深度学习常见算法,
- 对抗攻击、领域自适应、强化学习、元学习、终身学习、网络压缩等深度学习相关进阶算法。
Task 1
- 开营直播:AI学习路线
- 学习 深度学习基础:局部极小值与鞍点(文字 + 视频)
- 学习 深度学习基础:批量和动量(文字 + 视频)
Task 1.1 学习 深度学习基础:局部极小值与鞍点
局部极小值(local minimum)
局部极小值直观的看,其所在区域呈凹陷口袋形状,局部极小值周围的点都比其要大,做深度学习时使用梯度下降收敛在局部极小值,梯度为零,这时候假如往四周走,loss都会升高。
鞍点(saddle point)
鞍点顾名思义,这个点所在的区域呈马鞍形状,从上图可以看出,鞍点在一个方向上为区域最小值,无法继续优化;但在另一个方向上却是区域最大值,仍存在优化空间。虽然鞍点的梯度也为零,但它不是局部极小值。
应用
梯度为零的点统称为临界点(critical point)。训练优化走到临界点的时候,首先要判读这个临界点到底是局部极小值还是鞍点,如果损失收敛在局部极小值,所在的位置已经是损失最低的点了,往四周走损失都会比较高,就没有路可以走了;但如果是鞍点,旁边还是有路可以让损失更低的,只要逃离鞍点,就有可能让损失更低。
Task 1.2 学习 深度学习基础:批量和动量
批量(batch)
在计算梯度的时候,并不是对所有数据的损失计算梯度,而是把所有的数据分成一个一个的批量(batch),会去取出 B 笔数据用来计算出损失和梯度更新参数,遍历所有批量的过程称为一个回合(epoch)。
如果批量大小为训练数据的大小,这种使用全批量(fullbatch)的数据来更新参数的方法即批量梯度下降法(Batch Gradient Descent,BGD)。此时模型要一次性看完所有训练数据,才能计算损失和梯度,更新参数1次。
批量大小小于训练数据的大小(如大小为1),此时使用的方法即随机梯度下降法(Stochastic Gradient Descent,SGD),也称为增量梯度下降法。此时只要取出一笔数据即可计算损失、更新一次参数,用一笔数据算出来的损失相对带有更多噪声,因此其更新的方向通常是曲曲折折的。
大的批量更新比较稳定,小的批量的梯度的方向是比较有噪声的(noisy)。但实际上有噪声的梯度反而可以帮助训练,小批量梯度下降法(mini-batch gradient descent)每次是挑一个批量计算损失,所以每一次更新参数的时候所使用的损失函数是有差异的。
大的批量与小的批量各有优缺点,如下图所示,批量大小是需要去调整的超参数。
动量(momentum)
动量的概念来源于物理:一个球如果从高处滚下来,就算滚到鞍点或鞍点,因为惯性的关系它还是会继续往前走。如果球的动量足够大,其甚至翻过小坡继续往前走。
引入动量后,每次在移动参数的时候,不是只往梯度的反方向来移动参数,而是根据梯度的反方向加上前一步移动的方向决定移动方向,从两个角度理解:
- 一个角度是动量是梯度的负反方向加上前一次移动的方向。
- 另外一个角度是当加上动量的时候,更新的方向不是只考虑现在的梯度,而是考虑过去所有梯度的总和。
如下图示例,一般梯度下降到一个局部最小值或者鞍点时,就被困住了。但有动量还是有办法继续走下去,因为动量不是只看梯度,还看前一步的方向。即使梯度方向往左走,但如果前一步的影响力比梯度要大,球还是有可能继续往右走,甚至翻过一个小丘,也许可以走到更好的局部最小值。
Task 2
- 学习 深度学习基础:线性模型自适应学习率(文字+视频)
- 学习 深度学习基础:分类(文字 + 视频)
- 《深度学习详解》第三章 串讲&QA答疑 直播
- 跑通 实践任务CNN代码
Task 3
- 学习 批量归一化(文字+视频)
- 学习 卷积神经网络(文字+视频)
- 《深度学习详解》第四章 串讲&QA答疑
- 尝试进行 实践任务CNN进阶