MachineLearning机器学习2020-学习笔记

本文是记录笔者学习李宏毅老师 Meachine Learning 课程学习过程的笔记,依据课程内容进行章节分段,笔记有利于梳理知识脉络和督促自己学习,笔者将在学习过程中持续更新。
—— Lumos,2020/10/13


Lesson 0:Courese Introdcution

Q:什么是机器学习?A:机器学习就是“让计算机自动寻找解决问题的方法”

Example:

想要设计一个语音识别系统,机器学习要做的事情就是找到一个函数f,使其满足以下条件:
f(语音输入) = 识别文本

想要设计一个图像识别系统,就是要找到一个函数f,使其满足:
f(图像)= 图像识别结果

一、机器学习的基本分类

Regression 回归分析: 可简单理解为寻找的目标函数是输出值为数值的函数。

Classification 分类分析:
可分为如下两类:
Binary Classification: 输出值为二元值的函数,如判断“是”与“否”的机器。
Multi-Class Classification: 多分类函数,输出值为多个分类项。

Generation 生成学习: 函数的输出是具有复杂结果的生成性结果,如一段音频,一张图片等。

二、机器学习的步骤

2.1 Question1:怎样告诉机器要找的函数?

Supervised Learning 监督学习
在监督学习中,机器会被提供大量的Labeled Training Data,这些Data中除了输入之外还有期望的输出结果,Label会告诉机器理想的输出。
在学习过程中机器通过比较函数的Loss(损失) 自动找出Loss最低的function,也就是找到最能符合预期的函数。

Reinforced Learning 强化学习
通过Reward引导机器学习的方向,并不提供期望的输出,而是由机器自己通过不断尝试得到结果,在Reward引导下学习。如Google AlphaGo,在无数次模拟围棋对决中找到最佳策略。

Unsupervised Learning 非监督学习
给机器的没有标注的训练数据,由机器自己进行分析,可以找到数据中潜在的规律,一般可称之为“聚类”

2.2 Question2:机器怎样找到目标函数?

给定机器寻找函数的范围
例如Linear线性分析,将函数范围限定在Linear function

Learning Algorithm 学习算法
在本课程中主要运用到的学习算法是Gradient Desent:梯度下降算法

三、机器学习的前沿研究方向

Explainable AI

Adversarial Attack

对抗攻击,针对机器学习系统的恶意输入等攻击行为

Network Compression

神经网络往往需要消耗巨大的内存、算力资源,对其的压缩是一个前沿的研究方向

Anomaly Detection

Transfer Learning(Domain Adversarial Learning)

Meta Learning

Life-Long Learning


Lesson 1:Regression

回归分析作为机器学习的基础分析方法,在股市走势预测、自动驾驶、用户推荐算法中有着种种运用。本节课讲述了一个用于预测Pokemon神奇宝贝进化战斗值的回归分析算法。

Step1:Model

使用Linear Model:线性模型,输入为Pokemon初始的战斗力、身高等数据。参数中的w代表weight,b代表bias。

MachineLearning机器学习2020-学习笔记

Step2:Goodness of Function

如何判断机器找到的函数的好坏?引入概念 Loss ,Loss代表函数输出与期望结果的差距,通过另一个函数 Loss Function 来计算Loss,Loss越高说明举例期望越远,函数的可用性越差。

MachineLearning机器学习2020-学习笔记

通过Loss Function对比不同函数的的合理性,找到最合适的函数

MachineLearning机器学习2020-学习笔记

Step3:Best Function Finding

在知道如何分辨函数的好坏之后,下一个问题就是如何对比从而找到最佳的函数。
在这里我们采用了梯度下降法:Gradient Descent

MachineLearning机器学习2020-学习笔记

在使用梯度下降法时,首先找到一个初始参数,然后以参数为自变量对Loss进行微分,得到的结果即为Loss函数在参数初始点的曲线的切线斜率,由此便可知道Loss更小的方向在哪里,以设置好的常数项:Learning Rate向Loss更小的方向移动。此时可能出现的问题是局部最小值有可能掩盖全局最小值,但在Linear Model中不用考虑此问题,因为局部最小值就是全局最小值。
In linear regression,the loss function is convex(No local optimal)

MachineLearning机器学习2020-学习笔记

在模型具有两个或多个参数的情况下该如何处理呢?
同样的,利用在高等数学中学习过的偏导数知识,在初始参数值下分别对多个自变量求偏导数,然后向Loss小的方向移动。这里涉及到微积分下册的多元函数微分学知识,包括梯度、梯度下降等知识点请参考数学课本。

MachineLearning机器学习2020-学习笔记

通过梯度下降,我们就可以找到在预设的模型中Loss最小的函数,即可使用这个函数来预测Pokemon进化后的战斗力数值,那么结果如何呢?

结果分析

通过以上的步骤我们得到了一个理想的函数,这时候我们可以通过一组Testing Data和Loss Function来测试这个函数到底效果如何:

MachineLearning机器学习2020-学习笔记

我们发现,Testing data的平均错误值比Training Data更高,有没有什么办法进一步提高函数的预测效果呢?我们可以对模型进行改进:引入参数W2和输入的二次项。

Selecting another Model

MachineLearning机器学习2020-学习笔记

再次计算平均Error后,我们发现函数的预测效果更好了,那么能否继续增加参数和输入幂次呢?我们来尝试一下:

MachineLearning机器学习2020-学习笔记

不难发现,再次增添参数后函数的预测效果反而变差了,我们可以在增添一次试试:

MachineLearning机器学习2020-学习笔记

这时候函数的预测效果已经差的离谱,这是怎么回事呢?

这是因为我们的模型出现了对训练数据的 过拟合(Overfitting)

A more complex model does not always lead to better performance on testing data,which is Overfitting

在上面的尝试中,对Testing Data的预测效果随着参数的增加先变好后变坏,但是对Training Data 的拟合程度在逐渐增高,这是因为机器在寻找函数时过于偏向寻找符合训练数据的函数,而忽略了实际上的预测效果。

那么如何解决过拟合问题呢?

我们再次尝试重新设计Model,通过观察数据,我们发现Pokemon的战斗力和它们的种族好像有着关联,所以这次引入**函数,让每个不同种族的宝可梦有不同的预测函数:

MachineLearning机器学习2020-学习笔记

通过这种方法得出的最佳函数如下所示,它的预测效果更好了。

MachineLearning机器学习2020-学习笔记

还有方法进一步提高预测效果吗?答案是肯定的。

Regularization:Redesign Loss Function

除了修改模型之外,我们也可以对损失函数进行改进。在刚才的尝试中,我们发现在参数过多的情况下会出现过拟合,那么我们可以在Loss Function中引入新的一项来减轻Wi对损失函数的影响,在这种方式下寻找最佳预测函数。
当Wi越小时,函数的变化会显得越平滑,减轻参数对于Loss Function的影响会让训练数据中的noiss corrupt input造成的影响变小,从而减轻过拟合带来的危害。

MachineLearning机器学习2020-学习笔记

在Loss function中增添新项之后,我们可以观察函数预测效果的变化如下所示:

MachineLearning机器学习2020-学习笔记

We prefer smooth function, but not too smooth. Through selecting λ, we could find the function which has the best performance.

Now, we have completed this Pokemon-PC predicting system using the method of Machine Learning.

At the end of this lesson, we have made the conclusion of this lesson and brief introdduction of following lectures.

MachineLearning机器学习2020-学习笔记