机器学习-02(深度学习的基本概念)
机器学习的步骤
1.定义带有未知参数的函数
线性模型(linear models)具有较大的限制(Model Bias)
y = b + wx
无论如何更改b或者w,其只会呈现出一条直线,不能满足更加复杂的现实情况。
我们可以将复杂的函数(分段函数)看作:常数(其大小为实际函数与Y轴的交点)+激活函数(在小于某个数值时,为某个常数,在大于某个数值时,为某个常数)
红色为Piecewise Linear Curves(分段函数),蓝色为Hard Sigmoid(激活函数)
第一激活函数的转折点设在实际函数的第一个转角。分段函数的斜率与实际函数的斜率相同。同理第二个激活函数的转折点设为实际函数的第二个转角处,斜率相同......
最终实际函数等于f0+f1+f2+f3
有多个线段组成的函数称为Piecewise Linear Curves(分段函数),其都可以通过上面的方法组合出来。其转折的次数越多,需要的蓝色函数也越多。
在曲线问题上,我们可以通过微分的思想,在曲线上取足够多的点,以直代曲,这样就可以用直线来逼近这条连续的曲线。
所以可以通过分段函数去逼近任何连续的曲线。
激活函数可以使用一段S型曲线(sigmoid funcation)来逼近它
可以简写为:y = c sigmoid(b+wx1)
通过不断调整b、w和c来制造出不同的S型曲线
前面所求的分段函数就是多个激活函数累加之后的结果
i代表激活函数(蓝色函数),j代表特征的编号(如j = 10,则取前十天的样本进行计算)
wij代表在第i个激活函数里面的第j个特征的权重
其中r1、r2 和r3可以简化为矩阵与向量的加法和乘法:
所以
就可以写成
其中x是输入的特征,灰色的b是标量,w为矩阵,和绿色的b是向量
将所有的未知参数进行拆分,拼成一个很长的向量统称为
2.定义来自训练数据中的损失函数
拥有了新的模型之后,Loss与之前的定义方法还是一样的,只是符号更改了一下,变为:
L(w,b) ====> L() 用
来代表所有的未知参数
损失函数(Loss function)所作的事情就是,当为某一个数值的时候,会有多好还是有多不好
计算方法与只有两个参数的时候类似,假设给定一个值,再输入一个x,查看估算的y值,计算与真实的
(label)之间的差距,以此类推。把所有的误差加起来就得到了Loss
3.最佳化问题
optimization的演算法还是gradient descent。
寻找一组让Loss最小,将这一组
称之
*。
寻找*:
1.随机选一个初始值0
2.计算微分,对每一个未知的参数都去计算起对L的微分,之后把微分集合起来组成一个向量g(gradient)。
通常的表示方法:,其中倒三角形的意思是把所有的参数
1、
2、
3等对L做微分,算微分的
值为
0。
3.更新参数列表
其中两式相减是因为梯度的方向式函数增长最快的方向,朝着负方向式下降最快的方向。
重复以上的步骤,不断更新,直至不想继续更新或者得出
= 0。
在实际操作中,不是使用全部的数据去计算Loss,而是将数据分为多个batch(批)。多次进行计算,算出L1、L2、L3等,之后计算出gradient。
一次查看所有批次称之为一次epoch,epoch指的是整个训练数据集通过神经网络一次的过程。 每一次更新参数称之为update。、
所以一个epoch并不是更新参数一次。更新次数由batch size决定
例如:
ReLU(另外一种激活函数)
hard sigmoid可以看作式两个rectifier linear unit的叠加。
ReLU比Sigmoid更优。
Sigmoid或者ReLU等可以叫作Neuron,很多的Neuron可以叫作Neuron Network
过拟合(Overfitting)
指的是在已知的训练资料上变好,而在未知的训练资料上没有变好。