机器学习笔记(一)


机器学习三大步骤

先写出一个带有未知参数的数学式

$Function \ with \ Unknown \ Parameters$

$y = b + w x_1$

带有未知参数$b, w$的公式,叫做model(带有未知的参数的数学式)

$x_1:$ 公式中已知的东西叫做feature

$w:$ 不知道的参数叫做weight(权重)

$b:$ 不知道的参数叫做bias (偏移)

根据训练集定义$Loss$

$Loss(b,w)$是一个函数,输入是$b,w$

Loss代表训练出来的函数对于训练集的拟合程度

$Loss: L = \frac{1}{N}\sum\limits_n{e_n} (e = |y - y’|)$ 每项$e$是$model$对于训练集的误差

最佳化

$w^{\star}, b^{\star} = arg \ \min\limits_{w,b}L$

$Gradient\ Descent$

  • 随机选取一个初始点$w^0$
  • 计算微分 $\frac{\partial L}{\partial w}|_{w= w^0}$
  • 根据微分的正负选择向前或向后移动$\eta\frac{\partial L}{\partial w}|_{w= w^0}$, $\eta$学习速率,自己设置
  • 迭代的更新$w$值

$model$ 的限制

对于一次项的$model$是一条单纯的斜线,可能无法很好的拟合数据集,这叫做$Model$的$bias$,解决方法,写一个更复杂的,有更多未知参数的$model$

例如需要拟合一个复杂的函数(红色线段), 可以在每次的转折点添加一个蓝色线段,斜率保持相同即可,按理说,越是复杂的红色线段所需要的蓝色线段越多

models

对于连续的曲线可以选择足够多的点,就可以来使用蓝色线段拟合

piecewise linear

如何来表达蓝色线段

通过一个函数来逼近蓝色线段 $y = c \frac{1}{1 + e ^{-(b+wx_1)}}$ 即 $y = c \ sigmoid (b + wx_1)$

signoid Function1

调整$b, w, c$就可以得到各种各样的蓝色线段,改变$w$可以改变斜率,改变$b$会改变偏移,改变$c$会改变高

change bwc

对于不同的蓝色线段使用不同的$b,w,c$来通过$sigmoid$逼近,那么红色线段的函数式就为$y = b + \sum\limits_{i}c_i\ sigmoid(b_i + w_ix_1)$

线性代数表达

对于数据$x_1, x_2, x_3$

$\sum\limits_{i}c_i\ sigmoid(b_i + w_ix_1)$可以表示为

矩阵写法

$r = b + Wx$

在对每一个$r$做$sigmoid$运算 $a = \partial(r)$

红色线段函数: $y = b + \sum\limits_{i}c_i \ a$

使用线性代数表达方式: $y = b + c^T a$

使用$\theta $ 来包含所有的未知参数$\theta = \begin{bmatrix} \theta_1\\ \theta_2 \\ \theta_3 \\ \dots \\ \end{bmatrix}$

$Loss$ 使用$\theta $参数

$Loss$现在使用写成$L(\theta)$

新的$Loss$表示为:$Loss: \ L = \frac{1}{N}\sum\limits_ne_n$

迭代最好的$model$

$\theta^* = arg \ \min\limits_{\theta}L$

随机选择一个初始的$\theta^0$, 对$\theta$的每一项进行微分得到一个向量$g$ ,

$g = \begin{bmatrix} \frac{\partial L}{\partial \theta_1}|_{\theta = \theta^0} \\ \frac{\partial L}{\partial \theta_2}|_{\theta = \theta^0} \\ \frac{\partial L}{\partial \theta_3}|_{\theta = \theta^0} \\ \dots \end{bmatrix}= \nabla L (\theta ^0)$

在$\theta = \theta^0$的位置把所有的参数都对$L$做微分

更新$\theta$的值

$\begin{bmatrix} \theta_1^1 \\ \theta_2^1\\ \dots \end{bmatrix} \longleftarrow \begin{bmatrix} \theta_1^0 \\ \theta_2^0\\ \dots \end{bmatrix} - \begin{bmatrix} \eta \frac{\partial L}{\partial \theta_1}|_{\theta = \theta^0} \\ \eta \frac{\partial L}{\partial \theta_2}|_{\theta = \theta^0} \\ \dots \end{bmatrix}$

新的$\theta$由原先的$\theta^0$ 减去 微分的向量 × $\eta$

$\theta^1 \longleftarrow \theta^0 - \eta g$

步骤: 先随机选取$\theta^0$,通过计算$gradient$ 得到 $ g = \nabla L (\theta ^0)$,在如此迭代得到$\theta^1, \theta^2,…$直到无法在计算$gradient$时结束

实际操作时,将数据集分为多组,利用每一组来计算$gradient$更新$\theta$

compute gradient

从 $sigmoid$到$RELU$

利用$RELU$来拟合函数 $c\ max(0, b+wx_1)$

$ y = b + \sum\limits_i c_i \ sigmoid(b_i + \sum\limits_jw_{ij}x_j)$

$y = b + \sum\limits_{2i}c_i max(0, b_i+\sum\limits_jw_{ij}x_j)$

$sigmoid$ 和 $RELU$ 统称为$activation\ function$, $RELU$更好一些

过拟合

当拟合的函数次数过多时,对于训练数据会出现拟合效果好,但是对于测试数据拟合率爆炸的情况。


文章作者: Mug-9
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Mug-9 !
评论
  目录