【第一周】李宏毅机器学习笔记01

摘要

本周学习了机器学习的基本概念,包括机器学习的函数输入输出类型以及函数的分类,分别了解了简单模型和复杂模型的训练三步骤。认识了神经网络的的结构,了解了深度学习的训练三步骤,学习并手动推导了反向传播法,进一步理解了反向传播的思想以及反向传播中涉及的计算思路。

Abstract

This week, I learned the basic concepts of machine learning, including the types of function inputs and outputs in machine learning, as well as the classification of functions. I also learned about the three steps involved in training simple and complex models. I gained an understanding of the structure of neural networks, learned about the three steps involved in training deep learning models, and manually derived backpropagation, further enhancing my understanding of the concept and computational approach involved in backpropagation.

一、机器学习是什么?

Machine Learning ≈ Looking for Function
机器学习的基本原理是通过给定的数据集,让机器学习算法自动发现数据中的规律和模式,从而建立起对数据的预测模型。

1.函数的分类

简单来说,机器学习就是让“机器”帮助我们寻找一个函数

这个函数的输入可以是:

  • vector(向量):一组有序的数值或元素,通常被用来表示一维数组。
  • matrix(矩阵):例如一张图片就可以用一个矩阵来表示。
  • sequence(序列):比如一段文字或一段声音讯号,能够表示数据之间的时间关系和顺序信息。

在这里插入图片描述

图1.不同类型的函数

根据不同的输出我们可以划分不同的任务:

  • regression(回归任务):输出结果的为一个数值,通过学习输入特征与目标变量之间的关系,从而能够对新的输入数据做出目标变量的预测。

例如预测PM2.5的任务,如下图所示,将今日PM2.5值温度臭氧的浓度输入函数,输出结果为明日PM2.5的预测值。

在这里插入图片描述

图2.预测PM2.5

  • classification(分类任务):输出结果为设定好的某几个类别中的一个,目标是预测离散的标签或类别。

例如判断垃圾邮件任务,如下图所示,分类类别为YES和NO,输入为某一封邮件,输出结果为YES或NO。

在这里插入图片描述

图3.判断垃圾邮件

下围棋本质上也是一个分类任务,如下图所示,分类类别为19x19的格子。

在这里插入图片描述

图4.机器下围棋

  • structured learning:指机器产生一些带有结构的事物,比如图像、文本等,通俗来说就是让机器学会创造。

2.寻找一个合适的函数

例:播放量是UP主们十分关心的一个问题,通过预测播放量可以判断视频博主们未来的收入。假设我们知道一段时间以来的历史播放量数据,我们就可以建立某一种函数关系,通过前一天的播放量来预测第二天的播放量。

(1)Funciton with Unknown Parameters:寻找带有未知参数的函数

首先先猜测函数的方程,例如预测Youtube视频网站第二天播放量,其中x为某一天的播放量,y为x这一天对应的第二天的播放量,可以写作 y = b + w x 1 y=b+wx_1 y=b+wx1。值得一提的是,这个函数只是我们猜测出来的,真实的函数不一定是这个样子的。

在这里插入图片描述

图5.猜测“求解下一天播放量函数”的函数

其中,Modle在机器学习里是指带有未知参数的一个函数,x和y是已知的数值,称为feature。此外,w称为weight(权重),b称为bias(偏置)。

(2)Define Loss from Training Data:定义损失函数

loss实际上也是一个带有未知参数的一个函数,其中的未知参数为b和w,写作 L ( b , w ) L(b,w) L(b,w)。损失函数(Loss Function)是衡量模型预测值与实际标签之间差异的度量指标。损失函数通常用于评估模型的性能,并用于优化模型参数,以使模型能够更好地逼近真实的数据分布。

在这里插入图片描述

图6.Loss求解

如图6所示,假设b取了0.5k,w取了1,损失函数loss就是用来衡量这两个数值在当前模型中性能有多好的一个指标,其中用真实值和预测值之差的绝对值(MAE)来量化。损失函数最后的取值就是这三年来的差值求和再取平均值,loss的值越小代表b和w的参数取值越好,模型的拟合性就越强。

在这里插入图片描述

图7.损失函数的方程

如图8,根据不同的任务还可以选择不同的误差计算方法来计算loss。

在这里插入图片描述

图8.两种常见误差计算方式

(3)Optomization:最佳化

由于损失函数的值越小代表我们模型的性能越好,所以我们需要找到一组最优的参数使得损失函数的值为最小,即 w ∗ , b ∗ = a r g min ⁡ L w^*,b^*=arg\min L w,b=argminL

那么我们用什么办法找到这组参数呢?

Gradient Descent(梯度下降法)

梯度下降法(Gradient Descent)是一种常用的优化算法,用于最小化损失函数并求解机器学习模型的参数。梯度下降法的核心思想是通过迭代更新参数,沿着损失函数的梯度方向逐步减小损失函数的值,直至找到损失函数的最小值。

含一个未知参数的求解方法:寻找曲线的最低点

在这里插入图片描述

图9.梯度下降法

在这里插入图片描述
图10.推导过程

含多个未知参数的求解办法:寻找误差曲面(error surface)的最低点
在这里插入图片描述

图11.梯度下降步骤

  • 与求解单个参数一样,先找到一个随机的初始点 ( w 0 , b 0 ) (w^0,b^0) (w0,b0)
  • 分别求这两个参数的偏导数
  • 按梯度下降的方向不断更新w和b的值
    在这里插入图片描述
    图12.寻找最低点

在该例中,我们最终求得 w ∗ = 0.97 , b ∗ = 0.1 k w^*=0.97,b^*=0.1k w=0.97,b=0.1k
最终预测出来的结果如下图所示,其中红线代表真实值,蓝线代表预测值。

在这里插入图片描述

图13.真实值和预测值对比

观察上图,我们可以发现该图像具有明显的周期性,可以针对这个性质进行更一步的优化,我们可以考虑用一整个周期(7天)的数据来预测下一天的播放量。

在这里插入图片描述

图14.更优的结果

显然,相对于只考虑前一天的数据,考虑前七天数据而求得的真实值loss和预测值loss都得到了更小的结果。

在这里插入图片描述

图15.继续增加天数进行计算

很容易地想到,如果纳入更多天数进行考虑的话会不会得到更优的结果?如上图所示,当我们考虑天数越来越多之后的确会得到更优的结果,但似乎存在一个极限值,再增加天数进行考虑已经不能使我们的model更优了。

以上,形如 y = w x + b y=wx+b y=wx+b这种形式的函数模型统称为线性模型(Linear Model)。

3.非线性函数

(1)Funciton with Unknown Parameters:寻找带有未知参数的函数

在这里插入图片描述

图16

如图16所示,对于蓝色直线来说我们可以用一个简单的线性方程来拟合它,但是对于红色折线来说,一个线性方程已经无法描述它的性质了,我们需要寻找一个更加灵活的方程。

在这里插入图片描述

图17

Piecewise Linear Curves(分段线性曲线)可以用一个常数加多个如上图蓝色折线函数之和来拟合。

在这里插入图片描述

图18.用折线逼近曲线

那如果是曲线又该怎么办呢?其实我们可以在曲线上画几个点,再用直线把它们连起来。即使是曲线我们也可以用分段线性曲线来逐渐逼近。

那么问题来了,这个蓝色折线函数是什么?要怎么表示?

在这里插入图片描述

图19.Sigmoid函数

蓝色直线称为Hard Sigmoid函数,但通常我们用Sigmoid函数来逼近Hard Sigmoid函数。通过调整Sigmoid函数中b、w和c的数值我们就可以制造出来不同的函数去拟合复杂的非线性函数。

在这里插入图片描述

图20.不同参数对Sigmoid函数的影响

不同的w会改变sigmoid函数的坡度,不同的b会改变sigmoid函数的左右偏移量,不同的c会改变sigmoid函数的高度。

在这里插入图片描述

图21.函数叠加

将线性模型进行多个sigmoid函数的叠加改造,再考虑多个不同的feature之后就可以拟合更加复杂、更有弹性、更加灵活的模型。

在这里插入图片描述

图22

假设我们考虑三个不同的features和三个叠加的sigmoid函数,关于r的等式可以写成上图的形式,r指的是第一个蓝框中的取值。

在这里插入图片描述

图23.方程矩阵化

可以按照线性代数的方法将等式用矩阵来进行表示,这一步有助于将来的计算。

在这里插入图片描述

图24

再将r的值通过sigmoid函数,乘上c后再加上偏置b,就可以得到y的值了。

在这里插入图片描述

图25

综合以上提到的几点,可以按矩阵的形式写成一个整体的式子。如图所示,将w,b(向量),c,b(数值)合成在一起转换成一个一维的向量,这个向量统称为所有的未知参数θ。

(2)Define Loss from Training Data:定义损失函数

在这里插入图片描述

图26

定义损失函数的方法和之前简单模型定义loss的方法并无什么不同,区别就是所有参数统一用θ表示,写作 L ( θ ) L(θ) L(θ)

(3)Optomization of New Model:新模型的最佳化

在这里插入图片描述

图27.梯度下降法

本质上也和上一节提到的optimization也没什么不同。

在这里插入图片描述

图28.推导

在这里插入图片描述
图29

实际上我们在更新参数的时候会将数据集分为一个个batch,分别用一个batch去update一个θ参数,用所有batch更新完所有参数后叫一个epoch。

(4)ReLU函数

在这里插入图片描述

图30.ReLU函数

ReLU(Rectified Linear Unit)函数是神经网络中常用的激活函数之一,用于引入非线性特性,解决神经网络的非线性建模问题。Hard Sigmoid函数可以用两个ReLU函数进行叠加组成。

在这里插入图片描述

图31

因此,我们可以将先前的sigmoid函数用relu函数来替代。由于上文提到一个hard sigmoid函数需要两个relu函数进行叠加,所以需要relu函数的数量应为sigmoid函数的两倍。类似sigmoid和relu这样的函数我们统称他们为激活函数(Activation function)。

在这里插入图片描述

图32.更优的实验结果

对于案例,随着relu函数的数量逐渐增多loss随之降低,但是似乎仍存在一个极限值。无论是再增加考虑的天数还是relu函数的数量已经不能使我们的预测更加精准了,接下来我们还可以再对我们的模型进行优化。

(5)神经网络

在这里插入图片描述

图33

我们把图求得的部分再进行一次线性变换,通过sigmoid函数进行函数的叠加,这个流程可以反复进行。我们把含有一次线性变换计算称为一个layer。

在这里插入图片描述

图34

可以看到,随着层数(layer)的增加,我们得到的实验结果也愈加精准。

在这里插入图片描述

图35.神经网络结构

类似上文所提到的结构就是神经网络。中间层我们称为隐藏层(hidden layer),sigmoid函数的位置我们称为神经元。含有多个隐藏层的神经网络就是深度学习。

在这里插入图片描述

图36.越来越多的layer

随着深度学习的发展。layer的数量越叠越多,误差率也随之降低。但是思考一下,layer一定是越多越好吗?

在这里插入图片描述

图37.过拟合现象

对于案例来说,当层数增加到4层后对于2017-2020的数据的loss确实减少了许多,但对于2021年的误差反而增加了,这种就是过拟合现象。过拟合(Overfitting)是指机器学习模型在训练数据上表现得过于优秀,但在测试数据上表现较差的现象。过拟合通常是由于模型过于复杂或者训练数据噪声较多导致的,模型在训练数据上学习到了数据的细节和噪声,而无法泛化到新的、未见过的数据。

二、深度学习

在这里插入图片描述

图38.深度学习的发展

1.define a set of function:定义一组函数

在这里插入图片描述

图39.神经网络的结构

实际上,确定了一种神经网络结构就是定义了一组函数的结果。

在这里插入图片描述

图40.全连接前馈网络

全连接前馈神经网络(Fully Connected Feedforward Neural Network)是一种最基本的神经网络模型,也被称为多层感知机(Multi-Layer Perceptron,MLP)。全连接前馈网络由一个或多个全连接的隐藏层和一个输出层组成,每一层的神经元与上一层的所有神经元都有连接。在全连接前馈网络中,每个神经元接收上一层所有神经元的输出作为输入,并通过权重和偏置进行加权求和,然后经过激活函数产生输出。这个过程是“前馈”的,即数据从输入层经过隐藏层最终到输出层,不存在反馈连接。

Deep = Many hidden layers

显然,具有多个隐藏层的神经网络结构就是深度学习。

在这里插入图片描述

图41.经过一层神经元的矩阵运算过程

在这里插入图片描述

图42.矩阵叠加运算

为了简便计算和提升计算效率,通常对于整个神经网络的处理我们都使用矩阵进行计算。

在这里插入图片描述

图43

如图43,所示红框的隐藏层部分实际上代替了我们之前在机器学习中手动进行特征提取的任务,这也是深度学习相对机器学习的优势之一。

在这里插入图片描述

图44.手写数字识别

例如对数字“2”的图像识别。我们把给定16x16分辨率的图像“2”变换成一个256维的向量,其中有颜色的地方置为1,无颜色的地方置为2。由此可知,输入层的应为一个256维的向量,而输出层为一个10维的向量。

在这里插入图片描述

图45

我们需要在输入层和输出层之间寻找一组函数来让它们互相对应,中间这组函数就是我们说的神经网络。

在这里插入图片描述

图46

相对与传统机器学习,深度学习只不过是把一个问题变成了另一个问题。相比机器学习需要我们手动提取特征,深度学习虽然不用手动提取特征,但仍然需要我们自己决定神经网络结构、隐藏层数量等超参数。

2.goodness of function:函数评优

在这里插入图片描述

图47

与机器学习类似,我们也是要通过损失函数来评价模型的好坏。我们可以把通过神经网络求得的值与target值两两对应求交叉熵(Cross entropy)作为损失函数来评价模型的性能。

在这里插入图片描述

图48

对训练集中所有的数据运算一遍之后求得总Loss,接下来的任务也和先前机器学习一样,也就是找到一组最优参数 θ ∗ θ^* θ使得总Loss最小。

3.pick the best function:选择最优函数

在这里插入图片描述

图49.求梯度

我们还是采用梯度下降法,分别对每个参数求偏导即可求得损失函数Loss的梯度,再按梯度方向的反方向行走一段距离更新数值。

在这里插入图片描述

图50

按照设定好的学习率和误差反复进行梯度下降,最后到特定的步数或者处于误差范围内便停止。

4.误差反向传播法

深度学习中未知参数的个数可能高达上百万个,也就意味着我们可能要求导上百万次,有没有什么更加高效率的办法呢?

在这里插入图片描述

图51.求梯度

误差反向传播法(Error Back Propagation, BP算法)是一种用于训练多层神经网络的重要算法,由Rumelhart等人在1986年提出。这种算法解决了多层神经网络中隐含层连接权的学习问题,使得神经网络能够学习并适应复杂的非线性映射关系。BP算法通过梯度下降法来最小化网络输出与实际目标之间的误差,从而调整网络的权重和偏置,使网络能够更好地拟合训练数据。

在这里插入图片描述

图52.链式法则

反向传播法实际上来源于链式法则。

在这里插入图片描述

图53.损失函数对参数求导

假设 C n C^n Cn为预测值和target的交叉熵,损失函数可写成上式。损失函数 L ( θ ) L(θ) L(θ)对某个参数 w w w求偏导可写成右边的形式。

在这里插入图片描述

图54.前向处理和后向处理

那么我们如何求其中一个 C C C对参数 w w w的偏导呢?

由于链式法则, C C C w w w的偏导可以拆分为 z z z w w w的偏导乘以 C C C z z z的偏导,前者就称为前向传播,后者就称为反向传播。

(1)Forward Pass(前向计算)

首先我们先计算 z z z w w w的偏导数。

在这里插入图片描述

图55

在这里插入图片描述
图56

如图56所示规律可知,对于任意神经元, z z z w w w的偏导数就是就是该神经元对应参数 w w w的输入值。

(2)Backward Pass(反向计算)

接下来我们计算 C C C z z z的偏导数。
在这里插入图片描述

图57

在这里插入图片描述
图58

在这里插入图片描述

图59

如图,如果我们直接求 C C C z 1 z_1 z1的偏导就要先知道后面 C C C分别对 z 3 z_3 z3 z 4 z_4 z4的偏导,这样子的计算效率是很低的。我们可以再创建一个神经网络,从后面开始计算 C C C对各个 z z z的偏导,例如知道 z 5 z_5 z5 z 6 z_6 z6的偏导我们就可以求得 z 3 z_3 z3 z 4 z_4 z4的偏导。

在这里插入图片描述

图60

综上所述,要想求 C C C对参数 w w w的偏导,只需在Forward Pass中用前一个神经元(橙色)的input乘以Backward Pass中后一个神经元(绿色)的输出即可。

总结

机器学习的本质,就是寻找一个合适的函数,能够基于输入和输出得到人类想要的结果。在训练过程中,对于简单的线性问题我们可以用线性函数 y = w x + b y=wx+b y=wx+b来拟合,然后计算Loss,最后采用梯度下降法进行模型的优化。但是,对于复杂的非线性函数而言,简单的线性函数已经无法对其进行拟合,所以我们通常会用多个函数的互相叠加组合来拟合复杂的模型。在复杂的模型中,采用梯度下降法时可能要对上百万的参数进行求导,为了提高计算效率我们可以使用反向传播法。根据上文总结的规律, C C C对于两个神经元之间参数 w w w的偏导数就是在Forward Pass中前一个神经元的输出与在Backward Pass中后一个神经元的输出的乘积。

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值