目录
摘要
本周学习了机器学习的基本概念,完成了一个预测YouTube视频浏览量的模型,学会了定义一个模型,计算模型的loss值,然后通过loss函数计算梯度进一步更新参数。本周还学习了深度学习的基本概念,清楚了全连接前馈神经网络的基本结构。
ABSTRACT
This week, I learned the basic concepts of machine learning, completed a model to predict the number of YouTube video views, learned to define a model, calculated the loss value of the model, and then calculated the gradient through the loss function to further update the parameters. This week also learned the basic concepts of deep learning and clarified the basic structure of fully connected feedforward neural networks.
一、机器学习基本概念
1.机器学习的本质
根据数据的类型和任务的类别寻找合适函数。
2.不同类型的函数和任务
不同类型的函数具有不同的输出,可以解决机器学习中不同种类的问题,当输出结果为数值时,函数可以用来解决回归任务(regression),当输出结果为类别时,函数可以用来解决分类任务(classification),当输出结果为更复杂的输出(如:文档,图片等)时,函数可以用来解决更复杂的任务(如:让机器写文章,绘画等)。值得注意的是,函数的输入可以是向量,也可以是矩阵或序列等等。
回归任务通常指的是根据一组连续的输入数据来预测下一个数据的可能值,例如根据当天的PM2.5,温度,臭氧浓度来预测明天PM2.5的值。
分类任务通常指根据一组离散的输入数据来预测每一个数据可能的类别标签,这些标签可以是人们预先已知的,也可以是未知的。例如根据输入的邮件内容来判断邮件是否是垃圾邮件,人们预先就能够知道yes/no这两个类别。
也例如让机器下围棋,棋盘有19x19大小,即分类的类别有19x19个,人们不能预先知道棋子下在哪个位置才是最优解,故标签是未知的。
二、预测YouTube视频的浏览量
1.使用Linear model
step1:定义一个带未知参数的函数。函数表达式为:y = b + wx,x是已知数据即特征(feature),b(bias)和w(weight)为未知参数,y为输出的预测值。只有当b和w都取到合适的值时,y的预测值才能更加准确。
step2:在训练集上定义loss值(loss是一个含参数的函数,记为L(b,w),用来衡量输入的一组b和w的值的好坏程度,loss值越低,b和w的取值越好,反之则越差)。
step3:参数优化。利用梯度下降算法(Gredient Decent)优化参数的过程如下,先随机地选取一个初始值,计算在改点处斜率
(在该点处对
求偏导),最后更新
值为
(其中
为学习率)。当偏导数小于0时,说明该点附近的函数值左高右低,
的值要增加,当偏导数大于0时,说明该点附近的函数值左低右高,
的值要减小。最终得到的结果为局部最优解(Local minima)而不一定是全局最优解(Global minima)。
针对参数b的优化过程和上述步骤相同。
人为分析数据总结得出,视频的浏览量在一周内存在一定的规律,而仅仅根据前一天的数据来预测后一天的数据并不能很好的得出预测值,因此综合前三天或前七天的数据来进行预测可能会得到更好的预测结果。
2.使用更复杂的模型
Linear model太简单,存在一定的局限性,要想进一步提升预测的精度,我们需要采用更加复杂的模型,这种来自于模型的限制被称之为Model Bias。
下图中的红色曲线代表所有的分段线性曲线(All Piecewise Linear Curves)可以被任意的一个常量和一组蓝色曲线(sigmoid函数)相加所表示。当曲线不是分段线性曲线时,也能被任意的一个常量和一组蓝色曲线(sigmoid函数)相加所近似表示。
蓝色曲线代表sigmoid函数,表达式为,更改不同的参数会改变sigmoid函数的图像。
因此,可以使用sigmoid函数来构造更加复杂的模型,以此来提高模型预测的准确度。
step1:定义带参函数。
step2:计算loss值。(代表所有的未知参数)
step3:参数优化。
参数优化过程中并不是直接对所有的数据进行一次loss值计算,而是将所有数据均匀分成若干个batch,每一个batch计算一次loss值,每计算一次loss值就更新一次参数,遍历完一次所有的batch称之为一次epoch。
3.ReLU函数
ReLU函数和sigmoid函数都是机器学习中非常经典的激活函数,其表达式为:,当
时,输出结果为0,反之则为
。如果想要用ReLU替换sigmoid函数,只需要将
替换成
,同时将最外层求和符号的下标i改成2i,因为两个ReLU函数才能合成一个sigmoid函数。
通过套用多层激活函数会增加更多的未知参数,可能会使得模型有更低的loss值但不是层数越多越好,多层结构还可能会发生过拟合现象,即模型在训练集上的表现优秀而在测试集上的表现糟糕。
实际应用中对于复杂的神经网络模型更常用ReLU函数而不是sigmoid函数。相较于sigmoid函数,ReLU函数有如下优势:
第一,采用sigmoid函数,算激活函数是指数运算,计算量大;反向传播求误差梯度时,求导涉及除法,计算量相对大。而采用Relu激活函数,整个过程的计算量节省很多。
第二,对于深层网络,sigmoid函数反向传播时,很容易就会出现梯度消失的情况(在sigmoid接近饱和区时,变换太缓慢,导数趋于0),这种情况会造成信息丢失,梯度消失在网络层数多的时候尤其明显,从而无法完成深层网络的训练。
第三,ReLU会使一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生。
Sigmoid和Relu激活函数的对比_sigmoid函数和relu函数区别_bl128ve900的博客-CSDN博客
三、深度学习基本概念
1.全连接前馈神经网络
全连接前馈神经网络(Fully Connect Feedforward Network)是一个非常经典的神经网络结构,主要包括输入层,隐藏层,输出层,每一层之间通过全连接的方式连接起来。
隐藏层的功能主要是提取特征,每一层通过公式将结果输出至下一层作为输入,每一个激活函数可以看做一个神经元(Neuron)。其中,
实际运用中使用矩阵操作进行运算,即激活函数的输入也是一个矩阵。
最终所有的参数都可以用矩阵来表示,例如第一层的输入特征矩阵记为,权重参数矩阵记为
,偏移量参数矩阵记为
。因此激活函数的输入可以表示为
,激活函数的输出可以表示为
,记作
,然后将
的值作为下一层的输入,即
,以此类推。
隐藏层的本质实际上就是一个函数运算,只是内部的运算是矩阵运算而不是数值运算,最重要的是隐藏层的层数完全由网络设计者自己决定。
总结
本周学习了什么是机器学习,以及完成一个机器学习模型所需要的基本步骤,同时学习了深度学习的一个经典神经网络结构,下一周我将继续学习深度学习的基础知识,了解什么是反向传播。