赞
踩
MachineLearning ≈ Looking for Function
Regression:The function outputs a scalar. #标量(值)
Classification:given options ,the function give a correct one.
#第三大类是 structured learning:create sth with structure(img or doc)
先用线性问题举例,其中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 = η*梯度
epoch:整个训练数据训练完一次,称为一次epoch。训练包括:forward、loss、bp
batchsize:整个训练数据分组,每组大小为batchsize。每组生成一个专属loss和专属梯度grad,根据grad进行一次权重update,以便下个一个batch使用。
iteration(迭代):每次输入一个batch,即batchsize个数据,进行一次训练,称为一次iteration。
一次迭代可得到batchsize个error --> 一个loss&一个梯度g -->一次权重update
一次迭代就是一次update。
上面举例的Linear Function太过简单,实际上需要更复杂的Function去模拟现实情况。
如何写出更复杂的function?
例如下图红色curve,是一个piecewise linear function分段线性函数。(后文将用红色curve代替分段线性函数)
红色curve=0+1+2+3,0代表常数项,123是形状不同的蓝色function
所以可得出红色curve由不同的蓝色function组成。
一般情况,我们用分段线性函数(类似红色curve)去逼近代表真实问题的连续曲线,如下图。问题越复杂则曲线越复杂,需要的红色curve转折点越多,即需要越多蓝色function去构造。
具体来说,红色curve中分几段,则需要几个不同的蓝色function构造。
蓝色function,又称激活函数。
通常使用sigmoid函数。(也可tanh和relu)如下图介绍:
调整sigmoid函数中的参数b,w,c,就可制造出各式各样的蓝色sigmoid,有了各式各样的蓝色sigmoid,就可制造出不同的红色curve,近而就能去逼近现实中复杂问题映射的continuous curve(连续曲线)。
例如下图的红色curve=常数b+三个不同的蓝色sigmoid。(分了三段,所以需要三个sigmoid)
当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!!!
将所有的未知参数列成一维向量θ=[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)预测的值最贴近真实值!!芜湖
机器学习中将蓝色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?
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。