李宏毅2020机器学习1

  • Post author:
  • Post category:其他




1. 简介

机器学习就是自动找函式

机器学习:

  • 语音识别,f(一段声音)=“How are you”
  • 图片识别,f(一张图片)=“Cat”
  • 下围棋,f(一张围棋图片)=“5-5”
  • 对话系统,f(“How are you?”)=“I am fine.”

你想找什么样的函式?机器怎么找出你想要的函式?即 Gradient Descent;函式的Loss,机器会自动找出Loss最低的函式

  • Regression —- 回归,输出一个数值
  • Classification —- 二分类,input->f->Yes or No
  • RNN —- 二分类,input -> f -> 正面 or 负面
  • CNN —- Multi-class Classification,多分类,input->f->Class 1, Class 2, … Class N
  • Seq2seq —- Generation,生成
  • GAN
  • Unsupervised Learning —- 非监督学习,例如 Auto-encoder
  • Anomaly Detection —- 训练机器知道“我不知道”
  • Transfer Learning(Domain Adversarial Learning) —- 处理不同的输入数据
  • Explainable AI —- 可解释
  • Adversarial Attack —- 攻击AI
  • Network Compression —- 网络简化
  • Meta Learning —- Learn to learn,让机器学习如何学习
  • Life-long Learning —- 终身学习
  • Reinforcement Learning —- 强化学习



2. 规定



2.1. 环境

建议linux或macOS

python 3.6.8

pyenv



2.2. Kaggle

机器学习平台



3. Regression

回归:PM2.5预测、股票预测、自动驾驶、推荐系统



3.1. Model

a set of function




y

=

b

+

w

x

y = b + w \cdot x






y




=








b




+








w













x









w

w






w





:weight,



b

b






b





:bias 可以是任意值,因此 y 为一组函式



3.2. 准备训练数据 Training Data,定义损失函数Loss

Loss: input – a function,output – how bad it is





L

(

f

)

=

L

(

w

,

b

)

=

n

=

1

10

(

y

^

n

(

b

+

w

x

c

p

n

)

)

2

L(f) = L(w, b) = \sum _{n=1}^{10} (\hat{y}^n – (b + w \cdot x_{cp}^n))^2






L


(


f


)




=








L


(


w


,




b


)




=

















n


=


1



















1


0


















(











y







^
























n




















(


b




+








w














x











c


p









n


















)



)










2














3.3. Gradient Descent


线性回归基础版本



线性回归动态学习率adagrad版本


动态学习率能提高学习速度

局部最小值:线性回归中不用担心局部最小值,因为 loss function L is convex (凸函数)



3.4. Overfitting 过拟合

从最简单的线性方程开始,然后用二次方程,三次方程演示过拟合


模拟过拟合



3.5. Regularization 正则化





y

=

b

+

w

i

x

i

L

=

n

(

y

^

n

(

b

+

w

i

x

i

)

)

2

+

λ

(

w

i

)

2

y=b+\sum w_i x_i \\ L = \sum _n (\hat{y}^n – (b+\sum w_i x_i))^2 + \lambda \sum (w_i)^2






y




=








b




+














w










i



















x










i
























L




=
















n


























(











y







^
























n




















(


b




+














w










i



















x










i


















)



)










2











+








λ







(



w










i



















)










2













The function with smaller



w

i

w_i







w










i





















are better. 参数越接近0,方程越平滑

为什么平滑的方程比较好?平滑方程受噪声的影响比较小




λ

\lambda






λ





的值需要调整,才能获得较好的模型


注意:正则化并没有将3.4中的过拟合纠正过来,暂时不知道原因



4. 误差从哪来?

Bias(偏差)、Error(误差)、Variance(方差)



5. 梯度下降法

通过画出Loss的曲线,来判断如何调整学习率,通常情况下,lr随迭代次数逐渐变小

lr不应该one-size-fits-all,每个参数应该有自己的lr

调整学习率:自适应学习率—adagrad





W

t

+

1

W

t

η

t

δ

t

g

t

=

W

t

η

i

=

0

t

(

g

i

)

2

g

t

η

t

=

η

t

+

1

δ

t

=

1

t

+

1

i

=

0

t

(

g

i

)

2

W^{t+1} \leftarrow W^{t} – \frac{\eta^t}{\delta^t} g^t = W^t – \frac{\eta}{\sqrt{\sum_{i=0}^t(g^i)^2}}g^t \\ \eta^t = \frac{\eta}{\sqrt{t+1}} \\ \delta^t = \sqrt{\frac{1}{t+1} \sum_{i=0}^t(g^i)^2}







W











t


+


1






















W











t

































δ










t






















η










t




























g










t











=









W










t




















































i


=


0









t


















(



g










i










)










2











































η





















g










t
















η










t











=



























t




+




1




































η



























δ










t











=



























t




+




1














1































i


=


0


















t

















(



g










i










)










2



































adagrad后面学习非常慢,可以使用 adam

Stochastic Gradient Descent: 随机梯度下降法,仅随机选取一个样本,来计算梯度值

Feature Scaling: 特征缩放,让不同的特征有相同的比例;多个特征分布的区间非常不同时,建议进行特征缩放。特征缩放的方法很多,常见的有:





x

i

r

x

i

r

m

i

δ

i

x_i^r \leftarrow \frac{x_i^r – m_i}{\delta_i}







x










i








r









































δ










i































x










i








r


























m










i








































r 表示第几个样本, i 表示第几个维度 : 均值表示为



m

i

m_i







m










i





















,标准差表示为



δ

i

\delta _i







δ










i






















标准化处理后,所有维度均值为0,方差为1

泰勒级数:





h

(

x

)

=

k

=

0

h

(

k

)

(

x

0

)

k

!

(

x

x

0

)

k

h(x) = \sum_{k=0}^\infty \frac{h^{(k)}(x_0)}{k!} (x-x_0)^k






h


(


x


)




=

















k


=


0

















































k


!















h











(


k


)










(



x










0


















)




















(


x














x










0



















)










k

















x

x






x





很接近



x

0

x_0







x










0





















时:



h

(

x

)

h

(

x

0

)

+

h

(

x

0

)

(

x

x

0

)

h(x) \approx h(x_0) + h^{‘}(x_0)(x-x_0)






h


(


x


)













h


(



x










0


















)




+









h










































(



x










0


















)


(


x














x










0


















)






泰勒级数可以扩展到多参数

梯度下降法的限制:局部最小值、鞍点的微分值都为0



8. 深度学习优化

一些数学符号:




  • θ

    t

    \theta _t







    θ










    t





















    : t 时刻的模型参数




  • g

    t

    g_t







    g










    t





















    :



    θ

    t

    \theta _t







    θ










    t





















    的梯度




  • m

    t

    +

    1

    m_{t+1}







    m











    t


    +


    1






















    : 动量

优化内容:找一个参数



θ

\theta






θ





, 对于所有样本,使得Loss最小

On-line vs Off-line: 看到一个样本还是所有样本

优化器(Optimizers):

SGD(1847年): Start at position



θ

0

\theta ^0







θ










0












, Compute gradient at



θ

0

\theta ^0







θ










0












, Move to



θ

1

=

θ

0

η

L

(

θ

0

)

\theta ^1 = \theta ^0 – \eta \nabla L(\theta ^0)







θ










1











=









θ










0




















η





L


(



θ










0









)





, Compute gradient at



θ

1

\theta ^1







θ










1












, Move to



θ

2

=

θ

1

η

L

(

θ

1

)

\theta ^2 = \theta ^1 – \eta \nabla L(\theta ^1)







θ










2











=









θ










1




















η





L


(



θ










1









)





… Stop until



L

(

θ

t

)

0

\nabla L(\theta ^t) \approx 0









L


(



θ










t









)













0




SGD with Momentum(SGDM)(1986年): Start at point



θ

0

\theta ^0







θ










0












, Movement



v

0

=

0

v^0=0







v










0











=








0





; Compute gradient at



θ

0

\theta ^0







θ










0












, Movement



v

1

=

λ

v

0

η

L

(

θ

0

)

v^1 = \lambda v^0 – \eta \nabla L(\theta^0)







v










1











=








λ



v










0




















η





L


(



θ










0









)





, Move to



θ

1

=

θ

0

+

v

1

\theta ^1=\theta ^0 + v^1







θ










1











=









θ










0











+









v










1












; Compute gradient at



θ

1

\theta ^1







θ










1












, Movement



v

2

=

λ

v

1

η

L

(

θ

1

)

v^2 = \lambda v^1 – \eta \nabla L(\theta^1)







v










2











=








λ



v










1




















η





L


(



θ










1









)





, Move to



θ

2

=

θ

1

+

v

2

\theta ^2=\theta ^1 + v^2







θ










2











=









θ










1











+









v










2












; Movement not just based on gradient, but previous movement.

(下面三个优化器采用动态学习率)

Adagrad(2011年):



θ

t

=

θ

t

1

η

i

=

0

t

1

(

g

i

)

2

g

t

1

\theta_t = \theta_{t-1} – \frac{\eta}{\sqrt{\sum_{i=0}^{t-1}(g_i)^2}}g_{t-1}







θ










t




















=









θ











t





1































































i


=


0










t





1



















(



g










i



















)










2













































η






















g











t





1























RMSProp(2013年):



θ

t

=

θ

t

1

η

v

t

g

t

1

\theta_t = \theta_{t-1} – \frac{\eta}{\sqrt{v_t}}g_{t-1}







θ










t




















=









θ











t





1



















































v










t






















































η






















g











t





1






















,



v

1

=

(

g

0

)

2

v_1=(g_0)^2







v










1




















=








(



g










0



















)










2












,



v

t

=

a

v

t

1

+

(

1

a

)

(

g

t

1

)

2

v_t=a v_{t-1} + (1-a)(g_{t-1})^2







v










t




















=








a



v











t





1





















+








(


1













a


)


(



g











t





1




















)










2












; 此方法与 Adagrad 仅分母不同

Adam(2015年): SGDM 变形 + RMSProp—- SGDM[



θ

t

=

θ

t

1

η

m

t

;

m

t

=

β

1

m

t

1

+

(

1

β

1

)

g

t

1

\theta_t=\theta_{t-1}-\eta m_t;m_t=\beta_1 m_{t-1} + (1-\beta _1)g_{t-1}







θ










t




















=









θ











t





1






























η



m










t


















;





m










t




















=









β










1



















m











t





1





















+








(


1














β










1


















)



g











t





1






















] + RMSProp[



θ

t

=

θ

t

1

η

v

t

g

t

1

\theta_t = \theta_{t-1} – \frac{\eta}{\sqrt{v_t}}g_{t-1}







θ










t




















=









θ











t





1



















































v










t






















































η






















g











t





1






















,



v

1

=

(

g

0

)

2

v_1=(g_0)^2







v










1




















=








(



g










0



















)










2












,



v

t

=

β

2

v

t

1

+

(

1

β

2

)

(

g

t

1

)

2

v_t=\beta_2 v_{t-1} + (1-\beta_2)(g_{t-1})^2







v










t




















=









β










2



















v











t





1





















+








(


1














β










2


















)


(



g











t





1




















)










2












] = Adam[



θ

t

=

θ

t

1

η

v

^

t

+

ε

m

^

t

\theta_t = \theta_{t-1} – \frac{\eta}{\sqrt{\hat{v}_t} + \varepsilon} \hat{m}_t







θ










t




















=









θ











t





1



























































v








^
















t








































+


ε
















η






























m







^















t





















;



m

^

t

=

m

t

1

β

1

t

\hat{m}_t=\frac{m_t}{1-\beta_1 ^t}















m







^















t




















=




















1






β










1








t

































m










t








































,



v

^

t

=

v

t

1

β

2

t

\hat{v}_t=\frac{v_t}{1-\beta_2 ^t}















v







^















t




















=




















1






β










2








t

































v










t








































,



β

1

=

0.9

,

β

2

=

0.999

,

ε

=

1

0

8

\beta_1 = 0.9, \beta_2=0.999, \varepsilon=10^{-8}







β










1




















=








0


.


9


,





β










2




















=








0


.


9


9


9


,




ε




=








1



0














8













]

真实应用中,大部分模型使用的优化器是 SGDM(稳定) 或 Adam(训练快)

L2 regularization:



L

l

2

(

θ

)

=

L

(

θ

)

+

γ

θ

2

L_{l_2}(\theta) = L(\theta) + \gamma ||\theta||^2







L












l










2



































(


θ


)




=








L


(


θ


)




+








γ








θ

















2











Shuffling

Dropout

Gradient noise

建议:

SGDM: Computer vision(image classification、segmentation、object detection)

Adam: NLP(QA、machine translation、summary)、Speech synthesis、GAN、Reinforcement learning



版权声明:本文为gutsyfarmer原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。