【学习笔记】李宏毅-机器学习MachineLearning

1.机器学习,就是找一个函式

MachineLearning ≈ Looking for Function

2.机器学习两大类任务:

Regression:The function outputs a scalar. #标量(值)

Classification:given options ,the function give a correct one.

#第三大类是 structured learning:create sth with structure(img or doc)

3. 机器学习三大步骤:

先用线性问题举例,其中1)2)3)为一次Training

第一步1)Function with Unknown Parameters 写出一个带有未知参数的函式         

                                                 y = wx+b;                                    #weight,bias           

第二步2) Define Loss from Training Data 从训练数据中定义损失函数

     Loss :a function of parameters  -->  L(b,w)                           

                                                 Loss =1/n ∑error                      #loss是统计量(一般是)

*每个输入都会经历:in -> f(w*,b*) -> out -> error,都会记录输出与误差。

一组数据就有一组误差,一组误差计算出一个loss值(例如取平均)。

第三步3)Optimization 最优化:不停调整参数,找一组让loss最小的参数集

①Gradient Descent 梯度下降法

调整步伐△w = η*梯度

554b064be9474a65bd232fe499f2e0b4.jpg

15eb716eb7614602b6a19b23c91a4281.png

4. epoch,batchsize,iteration

epoch:整个训练数据训练完一次,称为一次epoch。训练包括:forward、loss、bp

batchsize:整个训练数据分组,每组大小为batchsize。每组生成一个专属loss和专属梯度grad,根据grad进行一次权重update,以便下个一个batch使用。

iteration(迭代):每次输入一个batch,即batchsize个数据,进行一次训练,称为一次iteration。

一次迭代可得到batchsize个error --> 一个loss&一个梯度g -->一次权重update

一次迭代就是一次update。

5. need more sophisticated function

上面举例的Linear Function太过简单,实际上需要更复杂的Function去模拟现实情况。

如何写出更复杂的function?

例如下图红色curve,是一个piecewise linear function分段线性函数。(后文将用红色curve代替分段线性函数)

红色curve=0+1+2+3,0代表常数项,123是形状不同的蓝色function

所以可得出红色curve由不同的蓝色function组成。

771bf4b5b688497db5a7849af37a6903.png

        一般情况,我们用分段线性函数(类似红色curve)去逼近代表真实问题的连续曲线,如下图。问题越复杂则曲线越复杂,需要的红色curve转折点越多,即需要越多蓝色function去构造。

具体来说,红色curve中分几段,则需要几个不同的蓝色function构造。

83d309b00bef4865b216422dc53bffc8.png

蓝色function,又称激活函数。

通常使用sigmoid函数。(也可tanh和relu)如下图介绍:

调整sigmoid函数中的参数b,w,c,就可制造出各式各样的蓝色sigmoid,有了各式各样的蓝色sigmoid,就可制造出不同的红色curve,近而就能去逼近现实中复杂问题映射的continuous curve(连续曲线)。

bc778811046e48bc84134ad4a4903ff1.png

160e09e16bcf4920abaea84e61c5ac87.png

 例如下图的红色curve=常数b+三个不同的蓝色sigmoid。(分了三段,所以需要三个sigmoid)

8a0eceecdaa642d58fdb2a48b91f1ba7.png


模拟现实从此开始!More Features Model!


6.More Features Model

当y不止被一个输入x决定,而是被多个输入部分(x1,x2,...,xj)决定时,

模拟现实的continuous curve该如何表示?

如下图蓝框内容。y = b + ∑i ci sigmoid(bi + ∑j wij xi)

此时x表示为输入的特征内容。一个x即一个输入特征,j个x则为j个特征。

例如第二天的播放量y与前28天的播放量x均相关时,则需输入28个特征值。

举个三输入的简单例子:

假设明天的播放量y与前三天的播放量x相关,则 j = 1 ~3 (特征个数)

假设用具有三个分段的分段线性函数逼近真实曲线continuous curve,则需要3个蓝色function,

即i =1 ~ 3

此处,j 的取值,表示输入特征x的个数,由实际问题决定。

i 的值为自定义参数,表示蓝色function的个数。i 越大说明红色curve转折点越多,越逼近真实曲线。

将上图的蓝框式子用网络结构图展开表示:其中r为x的线性组合,即将进入激活函数。

r 的三个长表达式可以用矩阵简化成一个式子:图底部的颜色小方块。

注意形状代表矩阵格式。

 所以虚线框和红框内容等价。都是为了计算 r = b+wx

计算出r1,r2,r3后,分别通过sigmoid function,得到a1,a2,a3。

直接用 a =σ(r)表示。

 接下来,sigmoid的输出a1a2a3还要乘上c1c2c3再加上b,最终就得到y。

所以总过程可以总结为下图三个向量式

1. 先由x的线性组合得到r;

2. 再将r输入进sigmoid得到向量a;

3. 再将a进行一个线性组合得到最终输出y。

最后 y 可以用一个线性代数式表示:


此时我们就重新改写了机器学习的第一步!!!!!

重新定义了一个带有未知参数的Function!!!

7. 计算Loss

将所有的未知参数列成一维向量θ=[w,b,c,...]。

接下来,要对每一个未知参数θi,都去计算对Loss的微分,这些微分组合起来,用一个向量g来表示,即梯度gradient。

优化过程:每个batch对应一批新的输入,即对应一批新的error,即生成一个专属loss和一个专属梯度g。

第一个batch使用初始θ0,计算出专属L1和g1后,利用g1更新参数θ0 -> θ1;

第二个batch使用更新后的θ1,计算出专属L2和g2后,利用g2更新参数θ1 -> θ2;

第三个batch...

以此类推,直到最后一个batch优化最后一次θ,该θ即为最优θ。

使用y=f(θ,x)预测的值最贴近真实值!!芜湖

8. 蓝色Function

机器学习中将蓝色function称为激活函数,目前最常用的激活函数为Relu。

由于一个sigmoid由两个relu组成,故relu的数量为2i。

下图为分别用线性、10个、100个、1000个relu所产生的误差,100个relu代表有50个折线段的红色curve。

输入x加权求和加偏差b后进入激活函数中称为一层layer,将输出a继续这个步骤第二次进入激活函数后输出称为第二层layer。多层意味着深,这样组成的网络即为deep learning。

将激活函数称作Neuron(神经元),运算的网络结构称为neural network(神经网络)。

按理说,只要够多的蓝色function,就可以逼近任何连续的function,我们只要够多的sigmoid,就可以制造够复杂的continuous function。所以只要一排relu/sigmoid够多就足够。那深的意义是什么呢,既然直接一排也可以表示任何的function,为何还要把relu/sigmoid反复用,构成deep learning?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值