NTU ML2023Spring Part2.1 基础知识
License: CC BY-NC-SA 4.0
机器学习的任务是什么?考虑几个常见的任务:输入一段语音,输出语音中的文字;输入一张图片,输出图片中的内容;输入棋局局面,输出下一步怎么走。总结一下就是找到一个函数。
几个常见的任务:
-
Regression
输出一个标量。
-
Classification
输出一个 enum 中的类型。(例如 Yes/No,或棋盘上落子的位置)
-
Structured Learning
输出一些带结构的东西(更复杂)
例如 text to image,或写一篇文章
Model:一个这样的函数,带有一些参数(Parameter)。
如何找到一个函数?
-
根据对该领域知识的理解先确定函数的大致类型(有点类似于数学中求回归方程的时候用一次函数还是二次函数拟合)
-
设计 loss 函数(输入为 Model 的 Parameter,输出一般是标量)。loss 越低代表 parameter 越好。(loss 可以是负的)
用不同参数得到的 loss 的等高线图就是 error surface.
-
对参数进行优化(optimization)
在这门课中只会用到 gradient descent. 基本原理就是在 error surface 上沿着地形较低的地方走一步,重复多次。步长即 learning rate,是超参数之一。超参数就是要自己调的参数(有点像模拟退火里的退火率,反正就是玄学调参)。
让 loss 最小的参数值叫 global minima,极小值处叫 local minima。
模型的更改往往伴随 domain knowledge 的加深。模型也许无法拟合真实数据(例如线性回归拟合二次函数就会有较大的差距),这种现象叫 model bias。
显然 linear model 是不够复杂的,那怎样的 model 足够复杂呢?
其实加上 ReLU 函数(\(f(x) = \dfrac{x + |x|}{2}\))就够了。注意到曲线可以用折线拟合,而折线可以由一堆 ReLU 函数(与线性函数的复合)之和表示。当然 sigmoid(\(f(x) = \dfrac{1}{1+\exp(-x)}\))也是可以的。
然后我们就有比较复杂的模型了。为了简化表示,可以用向量与矩阵描述:
-
假设是 regression 问题,输入一堆数,输出一个数
-
\(\mathbf{x}\) 是 feature(输入)
-
\(y\) 是输出
-
\(\mathbf{r} = \mathbf{b} + W \mathbf{x}\)
-
\(a_i = sigmoid(r_i)\)(即 \(\mathbf{a} = sigmoid(\mathbf{r})\))
-
\(y = \mathbf{a} \cdot \mathbf{c} + b_1\)
如何进行 Gradient descent?
-
将训练资料随机分成若干个 batch
-
对某个 batch 算出 loss
-
更新参数(称为一次 update)
-
重复上面两步直到所有 batch 都看过,整个过程叫一个 epoch
-
训练若干个 epoch 直到你不想训练
为什么叫 deep learning?因为神经网络有很多层,比较 deep。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探