「小杜」不有趣的机器学习实践鹿-1

一个小杜logo

初衷

作为一个不好好学习的瓜皮,怎么可能舍得动脑动手推公式,所以我才觉得我对机器学习的很多概念都是表面功夫,银样蜡枪头,在做毕业设计的时候发现:基础不牢,做啥花里胡哨都是闲的

那就花亿点时间开始实践手推公式吧。从头学起,头疼~

告辞表情包

吃苦是不可能不吃苦的,但是可以把笔记做的有趣一点。

——鲁迅


Tags: 机器学习

🏸什么是机器学习

人类宝宝在第一次看到一台自行车的时候,不用父母告诉什么样是自行车,他自己就能记下它的特征;这个小宝宝第二次看到自行车的时候,他们能从经验中学习,最终意识到:“咦!是自行车!要啥自行车儿?”

那么一台计算机,可以让它也拥有从经验中“学习”的能力吗。没错,这个就是机器学习的概念。

目前我们的发展还没有达到《黑客帝国》里“天网”那样的等级,基本还算是“弱人工智能”,某些情况比人类幼崽还弱(比如说少样本学习),但某些情况下它也能解决很多单凭人类难以解决的问题。就像斯坦福机器学习课程描绘的:

  • 把电子医疗记录变成医学知识,更好的理解疾病
  • 计算生物学,分析大量基因数据序列,DNA序列,更好的了解人类基因组
  • 在机械应用中的无人驾驶等等

这也是我觉得它确实很有趣(如果不用手推公式的话)也在未来很有作为的一个方面。

癌症预测例子

最后简单归纳一下:

  • 人工智能(Artificial Intelligence)——“星辰大海”,是要达到的目标
  • 机器学习(Machine Learning)——“航空火箭”,是一个可靠的工具(但不局限于实现人工智能)
  • 深度学习(Deep Learning)——“长征5号”,是目前工具中较强大的一个类型(专注于模仿大脑的结构和学习的过程)
v2-a841443ccad24cae9108de63d9a305ff_r

也有这样的分类:

微信图片_20210317150111

🎠怎样看懂机器学习术语

我们可以先记住一个高中学过的函数:y=f(x),把这个函数作为类比

术语解释
标签就是 y y y y y y可以是任何事物
特征就是 x x x,特征可以有多个, x 1 x_1 x1 x 2 x_2 x2 x 3 x_3 x3···
样本就是用于训练的一组 ( x , y ) (x,y) (x,y),也可以是 ( x , ? ) (x,?) (x,?),即无监督学习
模型就是x和y的关系: f ( x ) f(x) fx
回归模型预测y的连续值,输入 x x x y y y会是0到1之间的一个值
分类模型预测y的分类,输入 x x x y y y会是0和1中的一个类,如0是得病,1是不得病

机器学习就像是我们给人类幼崽看自行车的图片一样

需要给机器一些样本来训练,然后让机器学习到样本的特征,最后进行预测

好了,接下来是FBI警告,难度飙升~

🏑单变量线性回归 & 训练和损失

线性回归(Linear Regression)

对于一个宝宝而言,脑海里常常有一些问题:

  • 怎么去分辨一堆玩具中好玩的玩具和不好玩的玩具?(分类
  • 已知爸爸妈妈每天的出门次数,怎样知道他们明天的出门次数(回归

在现实生活中,这两类问题更加复杂头秃:

  • 怎么从病历信息中分辨一个人的乳腺肿瘤是良性还是恶性的?分类
  • 已经知道当前气象事件的历史数据,怎样预测未来的天气情况?回归

对于宝宝的简单问题来说,出门次数与天数很可能是一个线性关系。
在这里插入图片描述

y = a x + b y = ax +b y=ax+b
其中:

  • y y y 指的是父母每天出门的次数,即预测标签(理想输出值)
  • x x x 指的是天数,即输入的特征的值(图中记录了0-35天)
  • a a a 指的是直线斜率,即权重
  • b b b 指的是直线的截距,即偏差
训练与损失(Train & Lost)
训练

训练就是通过已知的标签样本 ( x , y ) (x,y) x,y,来确定所有权重(也就是 a a a)和偏差(也就是 b b b)的理想值。

训练的目的就是通过训练样本来获得一个模型,这个模型可以最大限度减少犯错,这个过程叫做==经验风险最小化==。(对于宝宝来说思路就是犯错越少,自然就会越来越正确)

损失

损失是对糟糕预测的惩罚(也就是犯错)。也就是说:

  • 模型预测的越好,损失越低;
  • 预测的越糟糕,损失越大;
  • 完全预测正确损失则为0;

平方损失

我们有没有数学方法(损失函数Cost Function)来衡量损失呢,拿出高中知识可以知道,可以用预测值 y ‘ y` y减去实际值 y y y的平方来计算损失
L 2 = ( y ‘ − y ) 2 L_2 = (y` - y)^2 L2=(yy)2
也可写成下面这样
L 2 = ( p r e d i c t i o n ( x ) − y ) 2 L_2 = (prediction(x) - y)^2 L2=(prediction(x)y)2
这种损失叫做平方损失(也叫L2损失),衡量了单个 x x x预测值的损失

均方误差(MSE)

均方误差指的是每个样本的平均平方损失,就是计算出每个 x x x的平方损失,再除以样本数量 N N N
M S E = 1 N ∑ ( p r e d i c t i o n ( x ) − y ) 2 MSE = \frac{1}{N} \sum (prediction(x)-y)^2 MSE=N1(prediction(x)y)2

🚕 怎样降低损失

关于宝宝的问题,我们只有一个特征(天数)作为输入,这种回归叫做单变量线性回归(Linear Regression with One Variable)

实际情况中,输入的特征不止一个,会遇到更高维度,更多参数的情况,例如气象事件的历史数据,包括 x 1 平 均 气 温 x_1平均气温 x1 x 2 湿 度 x_2湿度 x2湿 x 3 降 水 量 x_3降水量 x3等等;

梯度下降(Gradient Descent)

我们的目的是让损失降到最低,可以得知,损失最低的情况是模型完美的拟合了实际情况的所有点,此时损失为0。

对于宝宝的问题,我们的模型是
y = a x + b y = ax +b y=ax+b
换一种写法
y = θ 1 x + θ 2 y = \theta_1x + \theta_2 y=θ1x+θ2
损失函数也换一种写法(因为损失函数不止MSE一种)
J ( θ 1 , θ 2 ) J(\theta_1,\theta_2) J(θ1,θ2)
θ 1 , θ 2 , J ( θ 1 , θ 2 ) \theta_1,\theta_2,J(\theta_1,\theta_2) θ1,θ2,J(θ1,θ2)三个变量做一个等高线图:

image-20210317104141946

可以看出存在一个全局最优解(global minimum)(有的模型中也存在局部最优解(local minimum))

梯度

那么什么是梯度呢,定义是“函数的梯度是偏导数相对于所有自变量的矢量”

例如:

给定一个多变量函数:
f ( x , y ) = 3 x + 4 y f(x,y) = 3x+4y f(x,y)=3x+4y
f f f相对于 x x x的常规导数,把 y y y当做常数
f ( x ) ‘ = 3 f(x)` = 3 f(x)=3
同理,求 y y y的偏导数
f ( y ) ‘ = 4 f(y)` = 4 f(y)=4
那么这个多变量函数的梯度就是 ∇ f ( 3 , 4 ) = ( 3 , 4 ) \nabla f(3,4)=(3,4) f(3,4)=3,4

梯度是一个矢量,具有方向、大小,指向函数下降(或者增长)速度最快的方向。

给定一个更加复杂的多变量函数:
f ( x , y ) = 4 + ( x − 2 ) 2 + 2 y 2 f(x,y) = 4+(x-2)^2+2y^2 f(x,y)=4+x22+2y2
那么这个函数的梯度就是
∇ f ( x , y ) = ( 2 x − 4 , 4 y ) \nabla f(x,y) = (2x-4,4y) f(x,y)=(2x4,4y)
随着 x , y x,y x,y的不断变化,梯度也在不断变化。梯度不断下降的过程,就是我们不断逼近最优解的过程。

梯度下降与损失函数相结合

那么我们如何将梯度下降与损失函数,还有训练联系到一起呢,下式就是一个很好地例子
R e p e a t { θ 0 = θ 0 − α ∂ ∂ θ 0 j ( θ 0 , θ 1 ) θ 1 = θ 1 − α ∂ ∂ θ 1 j ( θ 0 , θ 1 ) } } \begin{aligned} Repeat\{ \\ \theta_0 &=\theta_0 - \alpha \frac{\partial}{\partial \theta_0} j(\theta_0, \theta_1) \\ \theta_1 &=\theta_1 - \alpha \frac{\partial}{\partial \theta_1} j(\theta_0, \theta_1) \} \\ \} \end{aligned} Repeat{θ0θ1}=θ0αθ0j(θ0,θ1)=θ1αθ1j(θ0,θ1)}

其中:

  • == r e p e a t repeat repeat==的意思就是重复训练很多轮次

  • == α \alpha α==代表学习率,表示训练的步长

    • 学习率 α \alpha α过小,达到收敛所需的迭代次数会非常高,就会花费很长的时间

    • 学习率 α \alpha α过大,就会导致训练的下一轮(Batch)在最优点随意弹跳,有可能越过局部最小值无法收敛

      image-20210317105516713
    • 我们的目的是找到一个足够找到一个足够高的学习速率,该速率要能够使梯度下降过程高效收敛,但又不会高到使该过程永远无法收敛。

  • == ∂ ∂ θ 0 j ( θ 0 , θ 1 ) \frac{\partial}{\partial \theta_0} j(\theta_0, \theta_1) θ0j(θ0,θ1)==表示 θ 0 \theta_0 θ0的偏导数,表示梯度,即为损失函数中增长最为迅猛的方向

  • == j ( θ 0 , θ 1 ) j(\theta_0, \theta_1) j(θ0,θ1)==即为损失函数

📒 线性代数回顾

矩阵乘法

回忆起曾经学过的矩阵乘法, m × n m \times n m×n的矩阵与 n × o n \times o n×o的矩阵相乘,会变成 m × o m \times o m×o的矩阵,如式1所示
[ 1 2 3 4 5 6 ] ∗ [ 1 2 ] = [ 1 ∗ 1 + 2 ∗ 2 1 ∗ 3 + 2 ∗ 4 1 ∗ 5 + 2 ∗ 6 ] = [ 5 11 17 ] \left[ \begin{matrix} 1 & 2 \\ 3 & 4 \\ 5 & 6 \end{matrix} \right] * \left[ \begin{matrix} 1 \\ 2 \end{matrix} \right] = \left[ \begin{matrix} 1*1 + 2*2 \\ 1*3 + 2*4 \\ 1*5 + 2*6 \end{matrix} \right] = \left[ \begin{matrix} 5 \\ 11 \\ 17 \end{matrix} \right] 135246[12]=11+2213+2415+26=51117

  • 矩阵乘法不满足交换律 A × B ≠ B × A A\times B\neq B\times A A×B=B×A
  • 矩阵乘法满足结合律 ( A × B ) × C = A × ( B × C ) (A\times B)\times C = A\times (B \times C) (A×B)×C=A×(B×C)
  • 单位矩阵 I I I(有时也写作 E E E)相当于1,有 A × I = A A \times I = A A×I=A
逆、转置

矩阵的就是说,当 A × B = E A \times B = E A×B=E时, B B B矩阵就是 A A A矩阵的逆矩阵,记作:
A − 1 = B A^{-1} = B A1=B

矩阵的转置就是说:
∣ a b c d e f ∣ T = ∣ a c e b d f ∣ \left|\begin{array}{ll} a & b \\ c & d \\ e & f \end{array}\right|^{T}=\left|\begin{array}{lll} a & c & e \\ b & d & f \end{array}\right| acebdfT=abcdef

矩阵的转置的基本性质如下:
( A ± B ) T = A T ± B T ( A × B ) T = B T × A T ( A T ) T = A ( K A ) T = K A T \begin{array}{l} (A \pm B)^{T}=A^{T} \pm B^{T} \\ (A \times B)^{T}=B^{T} \times A^{T} \\ \left(A^{T}\right)^{T}=A \\ (K A)^{T}=K A^{T} \end{array} (A±B)T=AT±BT(A×B)T=BT×AT(AT)T=A(KA)T=KAT

与梯度下降异曲同工的正规方程(Normal Equation)

既然梯度下降的最终目的是通过不断迭代,将 ∂ ∂ θ 0 j ( θ 0 , θ 1 ) \frac{\partial}{\partial \theta_0} j(\theta_0, \theta_1) θ0j(θ0,θ1)降到最低,得到一个最终的 θ \theta θ值,那么是不是可以直接计算等式
∂ ∂ θ 0 j ( θ 0 , θ 1 ) = 0 \frac{\partial}{\partial \theta_0} j(\theta_0, \theta_1) = 0 θ0j(θ0,θ1)=0
求解出最终的 θ \theta θ呢,这种方法就叫做正规方程,正规方程的解为
θ = ( X T X ) − 1 X T y \theta=\left(X^{T} X\right)^{-1} X^{T} y θ=(XTX)1XTy
正规方程也是有局限性的,下表是关于梯度下降与正规方程的比较:

梯度下降正规方程
需要学习率 α \alpha α不需要
需要多次迭代一次运算得出
当特征数量较大时也能较好使用特征数量大的话运算代价很大
适用于各种类型的模型只适用于线性模型,不适合于逻辑回归等其他模型

📃参考资料


  1. Machine-Learning-Book
  2. Coursera-ML-AndrewNg-Notes
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐