文章目录
摘要
本周学习了李宏毅老师的机器学习基础,通过一个入门案例认识机器学习的本质,函数的输入以及函数的类别有哪些,学习了training的三个步骤,包括简版和复杂版。以及神经网络的结构,深度学习正向传播计算模型的误差值、反向传播可以帮助我们有效的进行渐变迭代计算(帮助计算梯度)。
一、入门案例
机器学习的本质是找一个Function,比如,做一个语音识别文字这个函数的输入就是一段语言,其输出是对这段语音内容的识别;做一个图像识别,如识别图片内容;就是要基于人类的想法实现人类想要的输入、输出的结果。
找的Function不同,机器学习也有不同的类别
-
回归(Regression),函数的输出是一个数值。
例如根据今天的PM2.5,气温以及臭氧的含量预测明天的PM2.5。
-
分类(Classification),人类先准备一些选项(称为类别,class),函数的输出为从前面的选项中选择正确的输出。
例如:用户在收到邮件时,判断这一封邮件是否为垃圾邮件,给出Yes/No,Classification可以又多个类别。
-
结构化学习(Structured Learning) 让机器来创造
二、How to find a function
通过YouTube视频后台用户点击次数的预测为例子简单学习如何找到这个函数
1.Function with Unknown Parameters
首先要找一个带有未知参数的参式,这个Function称为Model,X(特征,feature)是从领域知识(domain knowledge)获取的已知数据,w即weight权重,b为bias.
2.Define Loss from Training Data
Loss也是一个function,输入是上面Model中的w和b,记作L(b,w);该函数的输出的意义是这一组b和w的数值到底好不好。
Traning Data
- step1 选取参数b=500,w=1;
- step2 利用该参数和Model y=b+wx计算出某一天的视频点击量的预测值,计算出预测值跟那一天的实际值(label)做差取绝对值记作e;
- step3 计算出Loss值,Loss的值越小,即预测误差越小,代表当前取的(b,w)参数值越好;Loss的值越大代表当前取的(b,w)参数值越不好
根据需求和对任务的理解决定e的计算方式不同
3.Optimization(最佳化)
寻找最佳的参数值w*,b*使得L的值最小,即最优解
梯度下降(Gradient descent是常用的优化方法
-
单参L(w)
-
双参L(w,b),
这三步称为Training
可以根据观察的数据进行合适的调整,如图所示数据呈现周期性规律,七天为一个周期。
修改一下model,分别考虑前七天,前二十八天的数据,考虑的天数越多,L的值越小,当考虑的天数达到一个极限值时,L的值不变了。
这些模型都是把输入的x(feature)乘上一个weight加上bias,这样的模型有一个共同的名字叫作Linear Models。
三、Linear Models
Model Bias
上面的model y=b+wx; 不管怎么改变w和b都是一条直线
如何找一个复杂的Function
红色这个复杂的线可以由一个常数加上若干个蓝色的Function组成,红线=0+1+2+3;
- 所有的piecewise Linear curves(分段线性曲线)都可以由一个常数加上若干的蓝色Function组成
越复杂的piecewise Linear curves需要越多的蓝色的Function - 任何连续曲线,你只要取足够多的转折点,你都能用piecewise linear curve去逼近他
1.Function with Unknown Parameters
用Sigmoid函数来逼近Hard Sigmoid
对于Sigmoid函数
不同的w,改变斜率
不同的b,改变偏移量
不同的c,改变高度
每一个蓝色的Function都可以由一个Sigmoid函数来表示
更有弹性的含有未知参数的Function,可以通过带入不同的w、b、c,就可以变成不同的Function。通过Sigmoid函数可以一步一步进行扩展。
x为表示特征,j是特征的编号,如:要考虑28天,j就是从1到28;i表示每一个由Sigmoid函数表示的蓝色Function;
将上述蓝框内公式用向量的形式表示,r为x的线性组合
整个过程可以由下图表示
- 先有x的线性组合得到 r;
- r作为Sigmoid的输入得到a;
- 再将a进行线性组合得到y;
2.Define Loss from Training Data
3.Optimization of New Model
寻找最佳的参数值组θ*使得L的值最小,即最优解
以此类推,直到不想做或计算出梯度为0,不过几乎不太可能梯度为0
在实际使用的时,会把N笔数据随机分成一个一个的批量(Batch),拿每个Batch里的数据计算各自的Loss;
第一个batch的数据使用θ0计算出L1和g1,利用g1更新参数θ0->θ1;
第二个batch的数据使用θ1计算出L2和g2,利用g2更新参数θ1->θ2;
以此类推,直到最后一个batch优化最后一次θ,该θ即为最优θ。
把所有的batch看过一遍,称为一个epoch。例如,N=10000,B=10,那么一个epoch包含1000次update。
ReLU
Hard Sigmoid 可以看作是两个修正线性单元(Rectified Linear Unit,ReLU)的加和
2 个 ReLU 才能够合成一个 Hard Sigmoid。要合成 i 个 Hard Sigmoid,需要 i 个 Sigmoid,如果 ReLU 要做到一样的事情,则需要 2i 个 ReLU
Sigmoid 或 ReLU 称为激活函数(activation function)
神经网络
x*w+b再通过激活函数得到a称为一层layer,将输出a继续这个步骤第二次进入激活函数后输出称为第二层layer
Sigmoid 或 ReLU 称为神经元(neuron),很多的神经元称为神经网络(neural network)。
layer越多越好吗?
随着层数的增加在训练数据和测试数据上Loss值都越来越小,但到第四层的时候训练时的Loss更小了,但是测试时的Loss比第三层大;
在训练数据和测试数据上的结果是不一致的,这种情况称为过拟合(overfitting)
四、深度学习
1.正向传播
每一层有多个neuron,Layer1中的每个neuron输出为Layer2中的每个neuron的输入,以此类推,所以叫Fully Connect(全连接)。传递的方向是从前往后,所以是Feedforward(正向传递)
通过矩阵进行运算
2.Backpropagation(反向传播)
在一个神经网络中,可能参数数目成千上万,那么这么庞大的计算量我们就需要一些可以辅助我们的工具。backpropagation(反向传播)可以帮助我们有效的进行渐变迭代计算(帮助计算梯度)。
总结-Backpropagation
为了简化对神经网络做梯度下降时带来的运算量巨大的问题。Backpropagation主要分为反向传播和前向传播。
前向传播很容易,主要传播的就是神经网络的输入。这个每一级的输入都会作为我们的偏导数来供我们去做梯度下降。
反向传播传播的是损失函数对z的偏导(z是每一级线性方程的输出),这个偏导数可以通过,从输出层到输入层的反向求解,使得运算达到进一步的简化。