机器学习笔记(一)

机器学习笔记(一)

什么是机器学习

机器学习概括来说可以用一句话来描述机器学习这件事,机器学习就是让机器具备找一个函式的能力。具体的说,机器学习就是找到一个复杂的函数,将我们输入的东西输出期待的值。可以是输入图片,输出图片中的信息,也可以是语音输入,输出文字。机器学习就是寻找建立在输入和输出之间的函数。

机器学习的三大任务

Regression

Regression的意思是说,假设我们今天要找的函式,他的输出是一个数值,他的输出是一个scalar,那这样子的机器学习的任务,我们称之为Regression。

Classification

Classification这个任务,要机器做的是选择题,我们人类,先准备好一些选项,这些选项,又叫作类别(classes),我们现在要找的函式它的输出,就是从我们设定好的选项里面,选择一个当作输出,这个任务就叫作Classification。

请添加图片描述Structured Learning

机器今天不只是要做选择题,不只是输出一个数字 还要产生一个有结构的物件,举例来说,机器画一张图、写一篇文章,这种叫机器产生有结构的东西的问题,就叫作Structured Learning。

机器学习的步骤

1. Function with Unknown Parameters

对于实际问题而言,第一个步骤往往是写出一个带有未知参数的函数,简单的说就是,我们先猜测一下我们要找的这个函数

F

F

F,他的数学式子到底长什么样,先做一个最简单的猜测:

y

=

b

+

ω

x

y=b+omega x

y=b+ωx

  • y是我们准备要预测的东西
  • x是我们已知的东西
  • ω

    omega

    ω

    b

    b

    b是位置的参数,也是机器要学习的内容,

    ω

    omega

    ω叫它weight

    b

    b

    b叫它Bias

这个带有 Unknown 的 Paramete r的 Function,我们就叫做 Model。

2. Define Loss from Training Data

第二个步骤是要定义一个名字叫做Loss的Function,这个Function的输入是我们Model的参数,输出的值代表着这个Model的拟合程度。通俗的讲就是根据我们已知模型输出的值和实际的值(Label)进行对比,通过一种计算方式的出已知模型和真是数据的差距。方法有很多种,计算y跟ŷ绝对值再相加得到Loss的方法叫做mean absolute error,缩写是MAE,计算y跟ŷ相减y平方算出来的,这个叫mean square error,缩写是MSE,还有Cross-entropy等算法。

在这里插入图片描述

Loss越大,代表我们现在这一组参数越不好,这个大L越小,代表现在这一组参数越好。根据Loss对不同

ω

omega

ω

b

b

b的变化我们可以做出Error Surface(误差曲面),可视化如图:

在这里插入图片描述

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

3. Optimization

第三步要做的事情,其实是解一个最佳化的问题,就是找一个特定的

ω

omega

ω

b

b

b代进去,可以让我们的Loss最小,这个可以让loss最小的

ω

omega

ω

b

b

b,我们就叫做

ω

omega*

ω

b

b*

b
如何找到最佳的

ω

omega

ω

b

b

b呢?为了要简化起见,我们先假设我们未知的参数只有一个,就是

ω

omega

ω,我们先假设没有

b

b

b那个未知的参数,只有

ω

omega

ω这个未知的参数。那当我们

ω

omega

ω代不同的数值的时候,我们就会得到不同的Loss,这一条曲线就是error surface。

在这里插入图片描述

Gradient Descent

  • 那首先你要随机选取一个初始的点,那这个初始的点,我们叫做

    ω

    0

    omega_0

    ω0,那这个初始的点往往真的就是随机的,那在往后的课程裡面,我们其实会看到也许有一些方法,可以给我们一个比较好的

    ω

    0

    omega_0

    ω0的值.我们先当作都是随机的

  • 那接下来你就要计算,在

    ω

    =

    ω

    0

    omega=omega_0

    ω=ω0的时候,

    ω

    omega

    ω这个参数对loss的微分是多少

    L

    /

    w

    (

    w

    =

    w

    )

    ∂L/∂w|(w=w)

    L/w(w=w)

  • 如果导数大于0,

    ω

    omega

    ω向左移动,反之向右移动。

那每次移动多少呢,这个步伐的大小取决于两件事:

  • 这个地方的斜率有多大,如果斜率大就跨步大一点,如果斜率小就跨步小一点。
  • 还有另外一个东西会影响步伐大小,这个东西我们这边用

    η

    eta

    η来表示,这个

    η

    eta

    η叫做learning rate,叫做学习速率,这个learning rate是你自己设定的,你自己决定这个

    η

    eta

    η的大小.

    w

    1

    w

    0

    η

    L

    w

    (

    w

    =

    w

    0

    )

    w_1←w_0-η frac{∂L}{∂w}|(w=w_0 )

    w1w0ηwL(w=w0)
    那接下来你就是反复进行刚才的操作,你就计算一下

    ω

    1

    omega_1

    ω1微分的结果,然后再决定现在要把

    ω

    1

    omega_1

    ω1移动多少,然后再移动到

    ω

    1

    omega_1

    ω1,然后你再继续反复做同样的操作,不断的把

    ω

    omega

    ω移动位置直至停下。

什么时候会停下来呢?往往有两种状况:

  • 第一种状况是你失去耐心了,你一开始会设定我的上限就是设定100万次,就我参数更新100万次以后,我就不再更新了
  • 还有另外一种理想上的停下来的可能是,今天当我们不断调整参数,调整到一个地方,它的微分的值就是这一项算出来正好是0的时候,参数就不会再移动位置。

推广到两个参数

ω

omega

ω

b

b

b,Gradient Descent方法和一个参数的时候一样:

w

1

w

0

η

L

w

(

w

=

w

0

,

b

=

b

0

)

w^1←w^0-η frac{∂L}{∂w} |(w=w^0,b=b^0 )

w1w0ηwL(w=w0,b=b0)

b

1

b

0

η

L

b

(

w

=

w

0

,

b

=

b

0

)

b^1←b^0-η frac{∂L}{∂b} |(w=w^0,b=b^0 )

b1b0ηbL(w=w0,b=b0)

在这里插入图片描述

复杂模型的构建方式

1. Function with Unknown Parameters

简单模型的构建方式分为三部,复杂模型的构建方式和其一样,第一步还是构建一个带有未知数的Function,但这个Function要复杂的多。

现实中的问题不会这么简单,对于刚才的例子来说,Model就是一条直线,对于Linear的Model永远拟合不了复杂的变化,这是一种来自于Model的限制,我们叫Model的Bias。所以我们需要写一个更复杂,更有弹性的Function。以如下的变化为例:

在这里插入图片描述

我们再定义一种新的Function:

在这里插入图片描述

这个蓝色的 Function,它的特性是

  • 当输入的值,当 x 轴的值小於某一个这个 Flash Hold 的时候,它是某一个定值,
  • 大于另外一个 Flash Hold 的时候,又是另外一个定值,
  • 中间有一个斜坡

这个红色的Function可以写成若干个蓝色的Function加在一起(可能会再加一个常数):

在这里插入图片描述

通过上面一种组合,可以发现任何Piecewise Linear Curves都可以写成若干个蓝色的Function相加组成的

在这里插入图片描述

再继续拓展,但

x

x

x

y

y

y的关系不是Piecewise Linear Curves 时,也许他是这样的曲线,那我们只需再这样的曲线上先取一些点,再把这些点点起来,变成一个Piecewise Linear Curves,而这个Piecewise Linear Curves 会随着点的增多跟原来的曲线越来越逼近:

在这里插入图片描述

所以任何的连续的曲线都可以用 Piecewise Linear Curves去逼近,而其中的每一个 Piecewise Linear Curves又都可以用一大堆蓝色的Function表示出来,也就是说我只要有足够的Function把他们加起来就可以变成任何的曲线。

那蓝色的Function怎么表示呢,同样我们用一条曲线去逼近这个Function,这个Sigmoid Function式子用这个表示:

y

=

c

1

1

+

e

(

b

+

w

x

)

y=c frac{1}{1+e^{-(b+wx)}}

y=c1+e(b+wx)1 可以简写

y

=

c

s

i

g

m

o

i

d

(

b

+

w

x

)

y=c*sigmoid(b+wx)

y=csigmoid(b+wx)成其图像如下:

在这里插入图片描述

通过调整

b

b

b

c

c

c

w

w

w可以制造任何形状的Sigmoid Function,用各种不同形状的 Sigmoid Function,去逼近这个蓝色的 Function. 所以Function都可以用统一的式子表达:

y

=

b

+

i

c

i

s

i

g

m

o

i

d

(

b

i

+

w

i

x

)

y = b + sum_i {c_isigmoid(b_i+w_ix )}

y=b+icisigmoid(bi+wix)
但上面的Model尽管已经特别有弹性,仍旧存在Bias。我们之前列举的Sigmoid Function

y

=

c

s

i

g

m

o

i

d

(

b

+

w

x

)

y=c*sigmoid(b+wx )

y=csigmoid(b+wx)可以看到

y

y

y只和当前的

x

x

x有关,但实际问题中,

y

y

y的值可能是又多个

x

x

x决定的,例如斐波那契数列中此项的值就和上两项有关,又或者一个简单的预测问题,下一个

y

y

y的值是由之前7个

x

x

x决定的,为了增加弹性,我们继续将Function优化成:

y

=

b

+

j

w

i

x

j

y=b + sum_j {w_ix_j }

y=b+jwixj整体的Function就变成了

y

=

b

+

i

c

i

s

i

g

m

o

i

d

(

b

i

+

j

w

i

j

x

j

)

y = b + sum_i {c_isigmoid(b_i+sum_j w_i{_j} x_j )}

y=b+icisigmoid(bi+jwijxj)

例如现在我们将

j

j

j定位3,

i

i

i定位3,将式子化简把

b

1

+

w

11

x

1

+

w

12

x

2

+

w

13

x

3

b_1+w_{11}x_1+w_{12}x_2+w_{13}x_3

b1+w11x1+w12x2+w13x3

r

1

r_1

r1表示:

在这里插入图片描述

写成矩阵的形式:

在这里插入图片描述

继续定义函数

s

i

g

m

o

i

d

(

r

)

sigmoid(r)

sigmoid(r)

σ

sigma

σ,

s

i

g

m

o

i

d

(

b

i

+

j

w

i

j

x

j

)

sigmoid(b_i+sum_j w_i{_j} x_j )

sigmoid(bi+jwijxj)就简写成

σ

r

i

sigma(r_i)

σri

σ

r

i

sigma(r_i)

σri我们用

a

i

a_i

ai来表示,则原式可写成:

y

=

b

+

i

c

i

a

i

y = b + sum_i {c_ia_i}

y=b+iciai整体的过程用矩阵表示如下:

在这里插入图片描述

其中

W

,

b

,

C

T

,

B

W,b(数),C^T,B(矩阵)

W,b,CT,B中的数都是为止的,将这矩阵和数拉直,拼成一个很长的向量,用

θ

theta

θ表示。这样我们复杂模型构建的第一步就完成了,最后得到了

θ

theta

θ同样也是第二步计算Loss的输入。

2. Define Loss from Training Data

这步和简单模型的计算方式一样:

  • 先给定某一组

    W

    ,

    b

    ,

    C

    T

    ,

    B

    W,b,C^T,B

    W,b,CT,B的值,即给定某一组

    θ

    theta

    θ

  • 然后把一组 Feature

    x

    x

    x 带进去,然后看看你估测出来的

    y

    y

    y 是多少

  • 再计算一下跟真实的 Label 之间的差距,你得到一个

    e

    e

    e

  • 把所有的误差通通加起来,你就得到你的 Loss

    L

    =

    1

    N

    n

    e

    n

    L=frac{1}{ N}sum_n e_n

    L=N1nen

3. Optimization

这步和简单模型的计算方法也没太大的区别:

  • 我们一开始要随机选一个初始的数值,这边叫做

    θ

    0

    theta^0

    θ0

  • 接下来呢你要计算微分,你要对每一个未知的参数,这边用

    θ

    1

    theta_1

    θ1

    θ

    2

    theta_2

    θ2

    θ

    3

    theta_3

    θ3 来表示,你要為每一个未知的参数,都去计算计算对 Loss的微分以后,集合起来它就是一个向量,那个向量我们用

    g

    vec{g}

    g

    。假设有一百个参数,那

    g

    vec{g}

    g

    的长度就是1000,这个向量有个名字叫做 Gradient,也可以写成

    L

    bigtriangledown L

    L(

    θ

    0

    theta^0

    θ0)

  • 接下来要更新参数,和之前的办法一样

    θ

    1

    θ

    0

    η

    g

    θ^1 ← θ^0-ηg

    θ1θ0ηg,知道停下来,使得Loss值最小。

但实际上我们往往在真正的做的时候往往将一个大的资料分解成一个一个的Batch,一包一包的分好,然后每一组Batch算一次Loss得

L

1

L_1

L1,因为整体的Loss和每一个Batch的Loss是不一样的,所以

L

1

L_1

L1

L

L

L也是不相等的。接下来我们根据这个

L

1

L_1

L1来算 Gradient,用这个 Gradient 来更新参数,接下来再选下一个 Batch 算出

L

2

L_2

L2,根据

L

2

L_2

L2 算出 Gradient,然后再更新参数,再取下一个 Batch 算出

L

3

L_3

L3,根据

L

3

L_3

L3算出 Gradient,再来更新参数。
所以我们并不是拿

L

L

L来算 Gradient,实际上我们是拿一个 Batch 算出来的

L

1

L_1

L1

L

2

L_2

L2

L

3

L_3

L3,来计算 Gradient,那把所有的 Batch 都看过一次,叫做一个 Epoch,每一次更新参数叫做一次Update, Update 跟 Epoch 是不一样的东西。

在这里插入图片描述

模型变形

上面我们将复杂模型变成n个简单模型的过程中,简单模型我们使用了Sigmoid Function的方式,实际上还有很多种例如RELU Function也可以完成。RELU是由两个Rectified Linear Unit 取最大值组成,其形状如下:

在这里插入图片描述

它有一个水平的线,走到某个地方有一个转折的点,然后变成一个斜坡,那这种 Function 它的式子,写成

c

m

a

x

(

0

,

b

+

w

x

1

)

c* max(0, b + wx_1)

cmax(0,b+wx1)
这两个蓝色的线,即组成大的Function的小Function都有一个共同的名字Activation Function

还有一种改进模型的办法是将原有的Function进行叠加,即将上一个Function的输出作为下一个Function的输入,现实中模型的层数可以达几十甚至几百,模型的拟合程度在短时间内会随着模型层数的增加而增加,到临界值后可能在训练集中效果很好,但当接触没学习过的数据(测试集)上效果下降很多,这种情况叫做模型的 Overfitting即过拟合。

在这里插入图片描述

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>