李宏毅深度学习笔记——呕心整理版
闲谈叨叨叨:
之前看过吴恩达的一部分课程,所以有一定理论基础,再看李宏毅的课程会有新的理解。我先以有基础的情况写完学习过程,后续再以零基础的角度补充细节概念(估计不会啦,因为懒~)。长篇预警!可以慢慢看。多数只是自己的笔记,不会太有语言的概念解释,建议自己看一遍视频(往后字可能会越来越多,听我慢慢叨咕吧)。笔记只是提供回忆、巩固理解的工具。若有问题,欢迎评论讨论,有时间我会改正哒!
经过我多年学习经验(没有啦~),预习真的很重要,其实更多是重复记忆,加深理解。我的建议是先看吴恩达的课程了解机器学习和深度学习的基本知识框架和概念,还有理论推导,理解就可以,这就相当于预习;然后看李宏毅的课程,换个思路,以实际应用加深理解,就会感觉吴恩达的课程缘由不太清楚的自然而然就通了;看李宏毅的课程同时,看刘二大人的pytorch课程,动手操作,学会后完成李宏毅的作业;pytorch需要线性代数和概率论(这些课上要好好学,忘了的可以速学一下考研课程)以及python基础,我会整理一些推荐课程和学习路线。
关于李宏毅课程的视频顺序,我大多是先看2021年,用2022年视频作为补充,快速过一遍,选修部分也看。视频链接还有一位大佬整理的资源我会附在正文的引入部分。
目录附上:
正片开始:
1 引入
- 视频资料整理:李宏毅2021&2022机器学习
- 视频:2022-机器学习相关规定
1.1 机器学习&深度学习
机器学习就是寻找一个复杂函数。
深度学习的函数就是类神经网络。
- 函数的输入可以是向量、矩阵、序列等等;
- 函数的输出可以是数值(称为regression 回归)、类别(classification 分类)、文本、图片等等

回归 regression:

分类 classification:

structured learning:

1.2 课程规划
——————————先更新到前5章——————————
Lecture1-5: Supervised Learning 监督学习
训练数据要有标注,数据集要知道输出值
缺点:耗费人工
Lecture 7: Self-supervised Learning
无标注资料——Pre-train
Lecture 6: Generative Adversarial Network(GAN)
Lecture 12: Reinforcement Learning(RL)强化学习
不知道怎么标注
Lecture 8: Anomaly detection 异常检测
Lecture 9: Explainable AI 可解释性AI
Lecture 10: Model attack 模型攻击
Lecture 11: Domain adaptation 域适应
Lecture 13: Network Compression
Lecture 14: life-long learning
Lecture 15: Meta learning
1.3 机器学习例子
根据过往观看次数预测明天的观看次数
1.3.1 训练过程(training)
-
含有未知参数的函数

-
定义损失函数

标签 label:已知的对应结果
求出 e 1 e_1 e1到 e N e_N eN
L o s s : L = 1 N ∑ n e n Loss: L=\frac{1}{N}\sum _ne_n Loss:L=N1n∑en补充:
loss函数可自己定义,以下常见三类:MAE、MSE、交叉熵


误差曲面(error surface):

-
优化
w ∗ , b ∗ = a r g min w , b L w^*, b^* = arg \min_{w,b}L w∗,b∗=argw,bminLa r g m i n argmin argmin:使后面的公式最小的参数
梯度下降 gradient descent
假设只有 w w w一个参数

带上 b b b嘞

超参数(hyper parameter):机器学习中,需要自己设定的参数
学习率
全局最小值与局部最小值的问题。后续补充,在2.1部分(手动跳转吧~ 无法页面内部跳转,气死我啦ヽ(*。>Д<)o゜)
这个问题并不是最主要的,最常见的。其实是学习率!
找到使loss最小的 w , b w,b w,b的值

1.3.2 改进(很牛逼,建议有基础后回看)

线性模型太过简单。
model bias:线性模型具有很大的限制
怎么避免model bias?需要更复杂的含有未知参数的函数。
线性函数都可以用一段一段的函数组成,即可用常数+若干个蓝色函数表示。

那怎么表示蓝色函数呢?
sigmoid function(S函数):
KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ y &= c\frac{1}…

调整sigmoid函数的 c , b , w c, b, w c,b,w制作各式各样的蓝色函数

所以…
y = b + ∑ i c i s i g m o i d ( b i + w i x 1 ) y=b+\sum_i{c_i\ sigmoid(b_i+w_ix_1)} y=b+i∑ci sigmoid(bi+wix1)

延伸一下(前方高能!!!):
若 y = b + ∑ j w j x j y=b+\sum_j{w_jx_j} y=b+∑jwjxj,则 y = b + ∑ i c i s i g m o i d ( b i + ∑ j w i j x j ) y=b+\sum_i{c_i\ sigmoid(b_i+\sum_j{w_{ij}x_j})} y=b+∑ici sigmoid(bi+∑jwijxj)

绝了哇!!!这不就是神经网络的隐藏层计算嘛!!!
用矩阵表示一下

然后对每个 r r r计算sigmoid
α = σ ( r ) \alpha=\sigma(r) α=σ(r)

最后求y
y = b + c T α y=b+c^T\alpha y=b+cTα

整理一下
y = b + c T σ ( b + W x ) y = b+c^T\sigma(b+Wx) y=b+cTσ(b+Wx)

其中 x x x是特征向量(feature), W , b , c T , b W,b,c^T,b W,b,cT,b(注意两个b不是一个意思哦~)是未知参数 ,将未知参数列成一列,统称为 θ \theta θ.

完美,更新了训练过程的第一步!!!
接下来,就是计算loss咯,没有什么变化,只是参数用 θ \theta θ表示,因为参数太多啦。所以loss函数为 L ( θ ) L(\theta) L(θ).
最后是优化,


梯度 gradient。一般不会有梯度为零的情况。
可能数据很多,不方便训练,可以将数据分为几个batch(后续补充,为什么这样做,在2.2部分),用一个batch计算损失值,然后**更新(update)**参数,再选下一个batch,继续更新,直到最后一个batch。
把所有的batch看过一遍,称为一个epoch。
1.3.3 激活函数
ReLU (Rectified Linear Unit)
y = c m a x ( 0 , b + w x 1 ) y=c\ max(0,b+wx_1) y=c max(0,b+wx1)

Hard Sigmoid就可以用ReLU组合表示
y = b + ∑ 2 i c i m a x ( 0 , b i + ∑ j w i j x j ) y=b+\sum_{2i}{c_i\ max(0,b_i

本文档系统地概述了李宏毅教授的深度学习课程精华,从机器学习与深度学习的基础概念出发,逐步深入探讨优化技巧、卷积神经网络、自注意力机制等核心主题,并解析Transformer的工作原理。
最低0.47元/天 解锁文章
888





