李宏毅笔记第一讲第一章:机器学习基本概念

37 阅读7分钟

1. 机器学习基本概念

机器学习就是找一个函数

1.1分类

  • 输出连续为回归regression
  • 输出离散为分类classification

1.1.1 regression常见应用

image.png

1.1.2 classification常见应用

image.png

1.2 方法

1.2.1 监督学习(Supervised Learning)

过程:

  1. 数据库中拿到特征数据
  2. 人工标记
  3. 给模型训练

特点:

  • 收集标记过的数据的人工成本大
  • 每个任务都需要标记过的数据

1.2.2 自监督学习(Self-supervised Learning)

过程:

  1. 预训练(学基本功)
  2. 微调
  3. 完成下游任务(其他类似任务)

1.2.3 GAN(Generative Adversarial Network)

过程:

  1. 收集到大量的x和大量的y
  2. 机器会自动的把x与y的函数关系找出来

1.2.3 半监督学习

定义:训练集同时包有标记样本数据(有目标值)和未标记样本数据(无目标值)。

  1. 数据库中拿到大量特征数据
  2. 从中取出少量特征数据
  3. 专家标记出少量目标数据
  4. 然后用少量标记过的以及大量的未标记的数据训练

1.2.4 强化学习(Reinforcement Learning - RL)

定义自动进行决策,并且可以做连续决策

解决:有些任务人工也标记不了,但是能定义什么的成功(例如:围棋最优解)

主要包含五个元素:

  • Agent:智能体,指的就是你写的算法,在游戏中就是玩家。
  • Action:行为,智能体通过一套策略输出一个行为作用到环境。
  • Reward:奖励值,环境反馈给智能体的奖励值。
  • Environment:外部环境,在游戏中就是游戏的环境。
  • Observation:状态值,环境反馈给智能体的状态值。

目标:获取最多的累计奖励

1.3 小案例

1.3.1 任务描述

需要根据以前的数据预测明天的点赞量

image.png

1.3.2 步骤一:随便猜测一个Model

image.png

名词解释

Model:模型,一个带有未知参数的函数

feature:特征,已知的数据

w(weight):权重,相乘的未知的参数

b(bias):偏置,相加的未知的参数

1.3.3 步骤二:定义Loss函数

Loss是一个函数,参数是b和w,即L(b,w),输出为Model的预测值和目标值的差距。

image.png

求取各种w和b的组合,画出Loss函数的等高线图(Error Surface)

image.png

1.3.4 步骤三:最佳化

找一个w*和b*,使得Loss函数最小

下面以一个参数w举例介绍梯度下降

image.png

采用梯度下降(Gradient Descent)方法:

  1. 随机选一个初始参数

  2. 求偏导

    • 若偏导小于零即左高右低,向右走加变量
    • 若偏导大于零即左低右高,向左走减变量
  3. 更新参数

    • 走的距离与斜率以及η有关,其中η为学习率(自己设定)
  4. 截至条件

    • 根据一个最大更新次数的hyperparameter
    • 算出偏导为零的极小值点

梯度下降有局部最优而非全局最优的问题

名词解释:

  • hyperparameters:超参数,自己设定的已知参数

实操多元时优化过程如下

image.png

1.3.5 步骤四:测试

image.png

数据集分为训练数据和测试数据,其中

  • 训练时Loss为0.48k
  • 测试时Loss为0.58k

1.3.6 步骤五:增加特征数据

打算用前七天的数据而非前一天作为参数,也可以考虑更多天(例如一两个月左右,28天以及56天)

image.png

发现56天与28天误差的变化并不大,特征数据的影响越来越小了

1.3.7 更flexible的模型

1.3.7.1 线性模型的缺陷

image.png

名词解释:

  • ‌Model bias(模型偏差):由于模型过于简单或假设不当,无法充分捕捉数据中的复杂关系,导致预测性能受限的现象‌
1.3.7.2 复杂函数构成

任何一个复杂的函数都可以看作一系列蓝色函数与常数的组合(只要蓝色函数足够多)

image.png

同理,曲线也可以

image.png

其中上述蓝色函数也就是激活函数

1.3.7.3 激活函数(Activation function)
1.3.7.3.1 Sigmoid

image.png

sigmoid函数近似蓝色函数:y=csigmoid(b+wx1)用sigmoid函数近似蓝色函数:y = c*sigmoid(b+w*x1)

名词解释:

  • Sigmoid Function:S型函数

image-20250603212520853.png

可以通过不同的w,b,c组成任意不同的S型函数

  • 通过w改变斜坡度
  • 通过b左右移动
  • 通过c改变高度

也就可以找到所有需要的蓝色函数组成红色函数

image.png

1.3.7.3.2 ReLU

image.png 但是能看得出,若要ReLu完成一条hard sigmoid的线需要两个ReLU函数,以下比较

image.png

其中ReLU一般比较好一些

1.3.8 多天数据的复杂模型

image.png

举例考虑前三天的数据

1.3.8.1 sigmoid函数的参数部分

假设三个sigmoid函数,记为r

image.png

用矩阵表示即

image.png

算出r后继续运算,分别通过sigmoid函数

1.3.8.2 通过sigmoid函数

image.png

通过矩阵记为

image.png

1.3.8.运算得到y

image.png

1.3.8.4 总结
1.3.8.4.1 图示

image.png

1.3.8.4.2 线性代数表示

image.png

重新定义名词

image.png

所有未知参数统称θ,所以Loss函数变为Loss(θ),优化也同样

image.png

其中▽为对L的西塔各个偏导

但实现时一般是随机分组后优化

image.png

  • 每一组优化结束叫一次update
  • 所有组优化结束叫一次epoch
  • Batch size也是一个hyperparameter

1.4 深度学习

1.4.1 多重激活函数

image.png

反复多做几次由一个hyperparameter决定,此时三层,观察Loss效果有提升

image.png

1.4.2 名词解释

上述的多重激活函数换一个名字

image.png

  • 每一层叫一个Neuron(神经元)
  • 综合叫Neural Network(神经网络)

但事实是,神经网络的名号已经臭了,而如今

  • 每一层叫一个hidden layer
  • 综合叫Deep
  • 所以叫Deep Learning

1.4.3 为什么不更深

image.png

四层比三层训练时的误差更,但是四层比三层测试时的误差更

这就是发生了Overfitting(过拟合)

1.4.4 实操三步骤

image.png

1.4.4.1 步骤一:定义function set

不同的连接方式导致不同的网络结构,以下介绍全连接

全连接:layer与layer之间的neural两两都有连接

image.png

将操作都看作矩阵运算

image.png

其中σ(西格玛)为sigmoid()

通过并行可加速矩阵计算

举一个简单例子:输入一张图片,判断是什么数字

image.png

输入层用256个x记录每个像素是否被涂黑,输出层用10个y输出每个数字匹配的概率。

而layer和neuron的数目不定:靠试错法和直觉

1.4.4.2 步骤二:定义网络的好坏

image.png

通过标记target的y^\hat{y}和运算出的yy运算得到误差

算出所有误差的总和

image.png

接下来要做的就是:

  1. 找一个好function set最小化Loss
  2. 找一组好参数θ*最小化Loss

怎么做呢?答:Gradient Descent!!!

image.png

这么庞大怎么算Gradient?答:Backpropagation反向传播:使用导数链式法则

1.5 backpropagation反向传播

To compute the gradients efficiently, we use backpropagation.

基于导数链式求导法则,如下:

image.png

若设定z为模型函数,w为各个模型参数,C为损失函数

怎么求Cz\frac{\partial C}{\partial z}? 由链式求导法知Cz=zwCz\frac{\partial C}{\partial z} = \frac{\partial z}{\partial w}*\frac{\partial C}{\partial z}

步骤分为forward pass和backward pass

1.5.1 forward pass

forward pass :计算zw\frac{\partial z}{\partial w},其中w要一个一个计算所有参数的

image.png

1.5.2 backward pass

backward pass:计算Cz\frac{\partial C}{\partial z}

image.png

  1. σ()=sigmoid() = 11+ez\frac{1}{1+e^{-z}},是可以求az\frac{\partial a}{\partial z}的,az=σ(z)\frac{\partial a}{\partial z} = σ'(z)
  2. za\frac{\partial z'}{\partial a}za\frac{\partial z''}{\partial a}就更好求了,以z'举例,由于z' = a * w3 +...,故za=w3za=w4\frac{\partial z'}{\partial a} = w_3,\frac{\partial z''}{\partial a} = w_4
  3. Cz=σ(z)[w3Cz+w4Cz]\frac{\partial C}{\partial z} = σ'(z)*[w3*\frac{\partial C}{\partial z'}+ w4*\frac{\partial C}{\partial z''}]
  4. 现在只有Cz\frac{\partial C}{\partial z'}Cz\frac{\partial C}{\partial z''}不已知了

最后的问题:求Cz\frac{\partial C}{\partial z'}Cz\frac{\partial C}{\partial z''}

1.5.2.1 假设一:z'和z''已经是output layer

image.png

此时已经可以算出来了,以y1y_1举例,y2y_2同理。

  • y1y_1与z'仅仅差一个定义的输出层函数,当然好求y1z\frac{\partial y_1}{\partial z'}
  • Cost()损失函数为自定义与y1y_1相关的函数,当然好求Cy1\frac{\partial C}{\partial y_1}
1.5.2.2 假设二:z'和z''还要作下一层的输入

反过来看这个网络,也就是按红色箭头来看,将Cz\frac{\partial C}{\partial z'}Cz\frac{\partial C}{\partial z''}看作输入,以这个角度看σ'(z),由于z已经在forward pass中被确定(z不会变动了),所以σ'(z)是一个常数,正好组成下面的式子,能看作一个新的网络

image.png

使用上述提到的思路,反复下去,直到假设一output layer的情况

image.png

看起来很恐怖,求每一个都需要后续的那么多数据,但是其实不是

我们可以根据以上思路,从后向前整体再走一边

image.png

这个就叫backpropagation

1.6 Regularization

注意:regularization不考虑bias

在Loss中加上对属性的单独考量,因为我们追求一个smooth的function

平滑就是输入的变化对输出不要过于敏感

image.png

λ越大表示:考虑smooth更多,考虑error更少

我们追求smooth,但是也不要太smooth

image.png