ML课堂作业,第五个是三层前向网络,老数据集ex4Data,首先把作业要求贴上来,一共可以分为两个部分,分别是手写版和tensorflow版,因为三层前向网络已经不是线性模型,所以也无法绘制出分类线,通过计算准确性来评估模型。
数据集是老数据集了,需要下载的可以在图中或前面的文章找到链接。三层前向网络是一个非常基础的神经网络,可以看成是若干个感知机的复合,可以选择任意激活函数,这里为了求导方便选择sigmoid,激活函数的作用是引入非线性变化,使得网络可以拟合非线性函数,下面给出网络结构
输入层的xi表示样本的每一个特征,输出层的yi表示样本属于第i类的概率,因为三层前向网络已经不是线性模型,所以我们无法向前面的模型一样在样本图上画出分类线,所以我们用正确率来评估模型的性能,为了避免过拟合以及能够准确评估模型,我们使用五重交叉检验,并取测试集上正确率的平均值作为模型最后的正确率。
训练过程的几个关键如上图,数据集以矩阵对的形式,其中样本x共有d个特征,可分为L个类别,我们还可以看出这种全连接的网络参数数量非常之大,在深度学习中这种全连接层一般放在最后或者干脆不用,最优化方法采用梯度下降,则对每个参数都要求对应的梯度,由于前向网络事实上是一个线性函数和激活函数的多重复合,所以梯度求导将运用链式法测,对链式法则不熟悉的同学可以回顾一下高数课本。
简单介绍一下交叉验证,我们学习模型的最终目的是在未知的样本上获得更好的预测性能,而不是追求在训练集上的最好性能,虽然训练集能一定程度的反应未知样本的特性,但可能存在无法反映的或者只有训练集中才有的特性,被我们的学习模型学得,这样会降低模型的泛化能力,所以我们并不使用整个数据集都来训练,我们选取一部分数据来训练一部分不参加训练用作测试。
k折交叉验证法就是将整个数据集分为不相交的k个部分,然后选取其中的一个部分为测试集,其他部分为训练集,获得测试准确率,然后重复上述步骤,直到每个部分都充当过一次