机器学习就是找到一个我们人类无法写出来的函数来完成各种任务
机器学习的任务
回归Regression:输出是一个数值
例如:预测未来某一个时间PM2.5数值
分类Classification:输出是选项
例如:输出是否是电子邮件,Alphago输出为棋盘的某一个位置
结构化学习Structured Learning:产生一个有结构的物件,例如产生一篇文章,写一段文字
机器学习的步骤
Step1、写出一个带有未知参数的函数表达式(Function with Unknown Parameters):选用一个可能的函数表达式(Model)来表达输入与输出的关系,其中的未知参数称为domain knowledge
Step2、Define Loss from Training Data:Loss是关于未知参数的函数
mean absolute error(MAE):就是采用预测值和标签相减绝对值的方式来象征误差
mean square error(MSE):就是采用平方差的方式来象征误差
Step3、求解minL,例如gradient descent梯度下降,其中自己设定的参数(例如学习率)成为hyperparameters,还有local minima和global minima(局部最小和全局最小)
Step4、通过对真实数据的观测,对原有的函数式子进行修改,例如增加周期性或者波动什么的,可能会更加景区
Model Bias:由模型本身带来的限制或者误差,例如线性函数对于非线性的模型的学习始终不够好
例如上图,对于复杂的函数都可以用一个常数加上很多个蓝色函数来构成,而就算是非线性
也可以通过取足够多的点来逼近,从而应用上述方法,因此最关键的就是蓝色函数如何表达,因此有了蓝色函数我们就可以拟合我们希望得到的任何函数
因此就可以引入sigmoid函数,用于逼近我们想要的上方蓝色函数,而各式各样的蓝色函数就是通过调整w,b,c从而改变它的形状达到我们的要求
因此,我们就可以将线性函数转换为具有更多特征的函数,可以拟合各式各样复杂的函数
引入神经网络:
用\(\theta\)向量来代表全部的参数构成的向量
因此就可以将这个函数重新代入上述机器学习步骤的Step1,作为我们需要预测的函数
同样利用梯度下降的方式来进行。
由于训练集有可能过大,那么可以对训练集进行划分:
每次update都是对一个batch(一部分训练集)去进行梯度下降(因为梯度下降的计算之中肯定需要计算样本的求和,不同训练集就会导致计算结果不一样),所有训练集过完就是一次epoch
Sigmoid也可以更换:
两个ReLU函数叠加就形成了上图那一个的函数形状,而由于每一个sigmoid需要两个ReLU,因此那里是2i
引入神经元的层数,就是上述过程再进行迭代:
那么每一个Sigmoid或者ReLU就是一个Neuron,整体就称为Neural Network
也可以每一个称为hidden layer,那么整体就是Deep Network
层次越深越好吗?并不是的,可能会出现overfitting,就是过拟合的问题,在测试集上更差
但是需要思考,为什么要弄得很多层,一层然后非常多的layer不是也可以表达任何一个函数的形状吗?
标签:例如,机器,函数,一个,李宏毅,可以,学习 From: https://www.cnblogs.com/FavoriteStar/p/16982666.html