【李宏毅2022春机器学习】01_机器学习基本概念简介

【李宏毅2022春机器学习】01_机器学习基本概念简介

说明:

  1. 本篇笔记基于李宏毅老师的课程:MACHINE LEARNING 2022 SPRING,2022课程与2021课程基本相同,李老师只做了些小补充,学习顺序基于 B 站 UP主@啥都会一点的研究生整理的:(强推)李宏毅2021/2022春机器学习课程
  2. 本篇笔记部分参考了博客园 @zyddd915 的笔记:李宏毅机器学习2022年学习笔记合集

机器学习的步骤

  1. Function with Unknown Parameters(未知参数函数)

    • 为什么是 y = W*x + b ?

      • 需要依赖于Domain Knowledge(领域知识猜测)
        • 对于预测问题,我用前一天预测后一天,我有理由认为后一天(y)与前一天(x)相关,所以给 x 一个系数 w ,表示和前一天(x)相关,但是又不可能完全相似,所以又给了一个修正 b 。
      • 带未知参数的函数就是 Model(y = w*x + b),其中 x 是feature, w 是weight,b 是bias。

      b与w是未知的,称为参数(parameter)

      这个带有Unknown的Parameter的Function,称之为Model(模型)

      x在这个Function中是已知的,是前一天的后台数据,称之为Feature(特征)

      w是与Feature相乘的数,称之为weight(权重)

      b没有与feature相乘,称之为Bias(偏离率)

  2. Define Loss from Training Data(定义训练数据的损失函数)

    • 根据训练资料,定义loss函数,用来衡量函数解和真实情况的差距

      Loss 是一个 Function,Label 表示正确的数值

      L越大,代表当前的参数值的选取越不好;L的值越小,代表当前的这一组参数的选取越好。
      L = 1 N ∑ n e n L = \frac{1}{N} \sum_{n}{e_n} L=N1nen
      现在我们使用的计算 e(损失值) 的方法有以下几种:

      1. mean absolute error(均绝对误差)MAE;$ e = \left | y - \hat{y} \right | $
      2. mean square error(均方误差)MSE; e = ( y − y ^ ) 2 e = (y-\hat{y})^2 e=(yy^)2
      3. Cross-entropy(交叉熵):当 y y y y ^ \hat{y} y^ 的值都为概率的时候,可以使用。
    • Error Surface(误差曲面)

      该图为一个真实数据计算出来的结果,我们可以调整b和w,让其取不同的值,每种组合都计算其Loss的值,画下其等高线图(Error Surface)。

      在这个等高线图上面,越偏红色系,代表计算出来的Loss越大,就代表这一组w跟b未知参数的选取越差;如果越偏蓝色系,Loss越小,就代表这一组w跟b未知参数的选择越好。

image-20230910111307986
  1. Optimization(最优化)

    • 优化的目的就是找到使 loss最小的参数,找到参数之后的模型就能真正用来预测了,也就是找到一个合适的w与b,可以让Loss的值最小,我们让这两个合适的参数称为 w ∗ w^* w b ∗ b^* b

      本门课解一个最优化的问题只会用到 Gradient Descent(梯度下降法)

      • local minima(局部最优) 其实是一个假命题,Gradient Descent(梯度下降法)真正的痛点李老师将在后续的课程讲到

      • 寻找 w 的方法

        1. 随机选一个初始的点,w0。(不一定完全随机,有选择的方法)

        2. 计算 w = w0 时,w对loss的微分是多少,也就是在wº上误差曲面的切线斜率

        3. 如果斜率为负值,就把w的值变大,可以让loss变小。

        如果斜率是正的,就代表Loss值左边比较低右边比较高,w往左边移,可以让Loss的值变小。

        image-20230910110625528

        同时,**Learning rate(学习率)**是影响w移动步长的重要因素,令学习速率为η。

        η的值越大,w参数每次update到下一个位置的步长幅度就会越大;

        η的值很小,则参数update就会很慢,每次只会改一点点参数的值。

        (这类需要人手工设置的参数叫做 hyperparameters 超参数

image-20230910112020900

表示更复杂的模型(单变量)

我们可以用以下方式来表达更复杂的模型:连续曲线、分离线性曲线(Piecewise Linear Curves)、Sigmoid Function(S型函数)。

image-20230910232409045.png

最有弹性的模型就是连续曲线,因为它描述复杂问题最为精准。用线段去逼进光滑的曲线,充足的分段线性曲线可以逼进连续曲线

Piecewise Linear Curves(分段线性曲线)

红线是分段线性曲线,蓝线是不同的hard sigmoid函数。下图中的 0 + 1 + 2 + 3 0 + 1 + 2 + 3 0+1+2+3 加在一起就变成了红线,所以用一堆的 hard sigmoid函数加上一个常数可以组成分段线性曲线。

image-20230910232643652

结论:

  1. 可以用 Piecewise Linear 的 Curves,去逼近任何的连续的曲线
  2. 每一个 Piecewise Linear 的 Curves,都可以用一大堆蓝色的 Function加上一个常量组合起来得到
  3. 只要有足够的蓝色 Function 把它加起来,就可以变成任何连续的曲线
Hard Sigmoid

Sigmoid 也称激活函数,而 Hard Sigmoid 也属于激活函数的一种,它为如下的蓝色S型折线。

image-20230910234432665

**而 hard sigmoid 可以用 sigmoid(S型曲线)来代表,因为差别很小可以忽略。**S型曲线中的 c、b、w都是参数,需要机器学出来。

PS:为什么不将 hard sigmoid 作为基础函数呢?因为转角处无法求微分,所以要用一个光滑的曲线做基础函数。

Sigmoid 函数

c、b、w 这三个参数可以得到各种不同的sigmiod来逼近蓝色function,通过求和,最终近似各种不同的连续的 Function。

  • 改变斜率w 可以改变斜坡的坡度
  • 改变b    可以把这个 Sigmoid Function 左右移动
  • 改变c 可以改变它的高度

总结:利用若干个具有不同 w,b,c的Sigmoid函数与一个常数参数的组合,可以模拟任何一个连续的曲线(非线性函数)

image-20230910234756618

表示更复杂的模型(多变量)

Function with Unknown Parameters(未知参数函数)
image-20230910235420809

将起初讨论的仅单变量 x 1 x_1 x1 的情况变成多个 feature,其中j用来表示 feature 的编号,同时 sigmoid 函数内也相应考虑每一个 feature 的情况,每一个 Sigmoid 的 Function 裡面都有不同的 bi 不同的 w i w_i wi,然后取 Sigmoid 以后乘上 c i c_i ci 全部加起来之后,再加上偏移量 b 就得到最终的 y ,这样不同的 w / b / x 组合就可以得到不同的 Function。

image-20230910235850750

for i 循环分别计算 r 1 , r 2 , r 3 r_1, r_2, r_3 r1,r2,r3,将每一个 x j x_j xj 输入 feature 分别与 w i j w_{ij} wij 相乘并求和,可以看作是矩阵向量相乘的关系。x 乘上矩阵 w 再加上向量 b,得到向量 r。

image-20230910235753830

接下来将 r 通过 sigmoid Function 求得 a 向量,乘矩阵向量 c 的 转置 Transpose 之后再加上偏移矩阵向量 b ,最终求得y的结果。

image-20230911160623488

可用线性代数中向量矩阵相乘的方式来表示上述操作。

image-20230911160841939

x 是Feature,

W是权重组成的矩阵,

绿色框的 b 为向量,灰色框的 b 为数值,

c 为常数组成的向量。

W、c、向量 b 、常数 b 是未知的参数,把这些未知的参数组合成一个长的向量:把 W 的每一行(或每一列)拿出来组合成一个长的向量,再把向量 b 组合进来,再把 c 的转置组合进来,最后再加入常数 b 。最后形成了一个长向量,用 θ 来表示,其中里面的 θ 1 θ 2 … θ_1 θ_2 … θ1θ2 都是来自上述的未知参数,所有的未知参数统称为θ

image-20230911161148543
define loss from training data(多变量)

有了新Model之后,我们需要进行第二步,从训练数据中定义Loss函数。

image-20230911161659664

计算Loss值的流程依旧和只有两个参数的时候类似,具体步骤如下:

  1. 先给定(或随机)一组值(θ)

  2. 代入一种 Feature x 的值,计算出预测的 y 值是多少

  3. 计算预测出的 y 值和真实的 label 之间的差距,用 e 来表示

  4. 把所有的 e 值相加并求平均,其平均值即为该模型的 Loss 值。

Optimization(最优化)
image-20230911162059557

整个操作流程如下:

  1. 先随机选择(或用更好的方法)一个初始的数值 θ 0 θ^0 θ0 计算其对 L 的微分,这样每一个位置的参数计算他们对 L 的微分之后的集合,是一个向量,用 g 表示,来代表 Gradient(梯度)。

  2. 算出梯度后,需要根据得到的梯度将 θ 0 θ^0 θ0 更新为 θ 1 θ^1 θ1,其中学习率的选择也与更新幅度有关

  3. 之后再根据 θ 1 θ^1 θ1 计算新的 Gradient,再把 θ 0 θ^0 θ0 更新为 θ 1 … θ^1… θ1 以此类推,直到计算次数达到了预先指定的上限,或者计算出来的梯度为 0 向量,无法再更新参数为止。

批处理

如果在求 Gradient 时候,数据 N 过大,为了加快更新速率,一般会把这 N 个数据分成一个一个的 Batch(一批;批处理),也就是对N个数据进行分组,设每个 Batch 中有 B 个数据。

image-20230911163316276

实际操作如下:

  1. 先选择一个 Batch,用这个 Batch 来算其 Loss,计为 L 1 L^1 L1,根据这个 L 1 L^1 L1 来算 Gradient,用这个 Gradient 来更新参数

  2. 接下来再选下一个 Batch 算出 L 2 L^2 L2,根据 L 2 L^2 L2 算出 Gradient,然后再更新参数

  3. 再取下一个 Batch 算出 L 3 L^3 L3,根据 L 3 L^3 L3算出 Gradient,再用 L 3 L^3 L3 算出来的 Gradient 来更新参数。

其中,每个 Batch 每更新一次参数的过程为 update,每过完一轮全部的 Batch 是一次Epoch

计算方法:假设我们有10000个Data,也就是N=10000,设我们的 BatchSize 是10,也就 BS = 10,则会产生 10000 / 10 = 1000 个 Batch,所以在一个 Epoch 里更新参数 1000 次。

模型的更多变形

1. 更改 Sigmoid

Sigmoid 可以用 Hard Sigmoid 替代。

image-20230911164142447

1个 Sigmoid 可以用 2 个 ReLU 相加得到。

image-20230911164241258

实际试验结果:

image-20230911165130332

2. 增加 hidden layer 层数

image-20230911164758000

其中, b b b b ′ b^{'} b w w w w ′ w^{'} w 是不同的参数,增加了更多的参数。

实际实验结果:

image-20230911165245565

神经网络基础

image-20230911170014477

Model 中的 Sigmoid 或 ReLU 称为 Neuron(神经元) ,多个神经元连起来就是 Neural Network(神经网络)

Neural Network 在80、90年代就已经产生了,当时被吹捧的太过浮夸,后来大家都对 Neural Network 这个名字非常感冒,它就像是一个脏话一样,写在 Paper 上面,就注定害你的 Paper 被拒绝。后来为了重振 Neural Network 的雄风,需要新的名字。

我们把每一排的 Neuron 叫做一个 hidden layer(隐藏层),有很多的 hidden layer,我们把它叫做 Deep。至此,这整套技术就叫做 Deep Learning

**预留问题:刚开始我们想用 Sigmoid 或 ReLU 去逼近一个复杂的 Function,实际上,只要够多的 Sigmoid 或 ReLU 并排在一起可以逼近任何连续的 Function,那么深(多层 hidden layer)**的意义到底何在呢?把 Sigmoid 反复用没什么道理呀?

Why we want “Deep” network, not “Fat” network ?

这个问题的解答将在后面的课程进行解答!

深度学习的层数也不能太多,太多会导致 Overfitting(过拟合),也就是在训练集上表现的好,但是在测试集上表现差。

image-20230911211542996

#完

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值