基本神经网络


简单整理一下神经网络训练的步骤

总结一下最简单的神经网络的训练过程和原理
通常利用数据交叉验证来提高数据利用率

交叉验证:给定一个训练集和测试集,为了最大程度的利用测试集,可以将训练集分为若干份,这里为5。第一次将fold1(折)作为测试集其余的作为训练集,第二次将fold2作为测试集,其余的作为训练集,以此类推从而达到最大化利用数据更新权重的效果

对于输入的一张图片简单将图片的输入像素点看成[1,4]的矩阵、输出层为[1,3],中间的权值为[4,3]的矩阵、和图中不同图中是左成矩阵、这里定义的是右乘矩阵、没有定义中间层、最后还要加上[1,3]偏置值得到[1,3]的输出值每一个值代表某一类别的得分、

为了更好的定以中间权值定义的好坏以及预测结果的准确程度、用损失函数来衡量、损失函数最小表示预测越准确、这里定义的是svm损失函数、
l 表示自己定义的可容忍的长度
yi表示正确类别的得分
j表示其他类别的得分
通过计算每个其他类别减去正确类别的得分的最大值的求和来表是损失函数的结果对于多个输入例如输入100张图片还要除去100相当于取平均值

为了防止权值为0从而导致输入样本的每一个值没有被充分利用例如训练得到的两个权值
设输入的样本为[1,1,1,1]
权重W1[0.5,0.5,0.5,0.5]
权重W2[1,0,0,0]
矩阵相乘后得到的结果相同但是w2由于有三个0没有充分利用每一项所以添加w的平方项来惩罚权重为w2的情况、使其损失值变大


分类器的作用将输出的值通过sigmoid函数映射到0至1的区间上、e的x次幂进行放大、最后通过取其作为正确类别的概率取负对数得最终其对应的损失值(因为概率越大越输出的损失值越小)
前向传播:从输入的x一直到计算出loss、通过梯度下降算法找到一个下降方向、最终找到最低点、训练的批次数一般为2的整数次幂
一个Epoch表示迭代完所有数据、一个迭代表示跑完当前的一个batch

学习率

每次训练跟新权重的变化要乘一个学习率来调整权值变化的大小、过大会错过最优解

反向传播

通过计算出每一个权重对最终的loss值的影响来调整权重的大小(向前传播的逆向求解)

激活函数

对神经元的输出进行去线性化、例如sigmoid函数(由于当x过大时很容易导致梯度消失使其无法求导进行反向传播、现在一般用relu激活函数并且求导简单)

过拟合问题

drop-out进行处理通过迭代来弥补神经网络的复杂度

过程小结

首先输入训练集如手写数字集、定义神经网络后、通过向前传播得到对每一个类别的输出、通过sortmax函数将输出转化为概率分布、通过与标签进行如下运算个(标签是one-hot概率)、将输出的概率分布取对数与标签值乘积在做平均值求和最后取负数-tf.reduce_sum(y_*tf.log(y))、得到交叉熵来反应结果集与标签的相似度、最后通过梯度下降法不断训练使交叉熵最小、来优化权重参数、

文章目录
  1. 1. 学习率
  2. 2. 反向传播
  3. 3. 激活函数
  4. 4. 过拟合问题
  5. 5. 过程小结