美文网首页
神经网络的训练

神经网络的训练

作者: 0xFFFFFG | 来源:发表于2019-06-15 15:34 被阅读0次

    数据驱动

    提取特征量

    传统算法/其他机器学习算法/神经网络,灰色部分表示没有人为介入

    训练数据和测试数据

    • 使用训练数据进行学习,寻找最优的参数
    • 使用测试数据评价模型的实际能力
    • 仅用一个数据集去学习和评价参数,容易出现过拟合

    损失函数

    • 神经网络中以某个指标为线索寻找最优权重参数,所用的指标为损失函数
    • 均方误差:E=\frac{1}{2}\sum_k(y_k-t_k)^2,其中y_k 是表示神经网络的输出,t_k 表示监督数据,k 表示数据的维数
    • 交叉熵误差:E=-\sum_kt_klog\ y_k,其中y_k是神经网络输出对应分类的概率,t_k表示监督数据,k表示数据的维数,log表示自然对数
    • 批数据的交叉熵误差:E=-\frac{1}{N}\sum_n\sum_kt_{nk}log\ y_{nk}
    • mini-batch: 从训练数据中选出一批数据(称为mini-batch),用这批数据进行学习,这种方式称为mini-batch

    梯度下降法

    梯度(gradient): \nabla f = (\frac{\partial f}{\partial x_1},\frac{\partial f}{\partial x_2},...,\frac{\partial f}{\partial x_n}),梯度是一个向量
    梯度下降法:
    x_0' = x_0-\eta\frac{\partial f}{\partial x_0} \\ x_1' = x_1-\eta\frac{\partial f}{\partial x_1} \\ 表示成向量形式:\vec {x'} = \vec{x} - \eta·\nabla f\qquad其中\eta称为学习率 \\ 循环执行这个步骤,当|x'-x|<\epsilon时,凸函数f找到误差范围内的最小值

    正向传播的二层神经网络

    步骤

    1. 确定概率预测函数
      predict : (Param,X) \rightarrow \{\\ W_1,W_2,b_1,b_2 = Param[W_1],Param[W_2],Param[b_1],Param[b_1] \\ A_1 = X·W_1^T + b_1 \\ Z_1 = sigmoid(A_1,axis=1) \\ A_2 = Z_1·W_2^T + b_2 \\ Z_2 = softmax(A_2,axis=1) \\ y = Z_2 \\ return\ y\}
    2. 确定T函数(预测正确为1,否则为0)
      t : (Param,X,y) \rightarrow \{ \\ p = predict(Param,X) \\ y_{predict} = argmax(p,axis=1)\\ return\ int(y_{predict} == p,axis=1)\}
    3. 确定交叉熵误差作为神经网络损失函数
      loss :(X,Param,y)\rightarrow\{ \\ t_{val} = t(Param,X,y) \\ p = predict(Param,X) \\ return - t_{val}·log(p) \}
    4. Xt作为参数,确定loss函数对变量ParamParam=Param_0处的梯度
      G_0 = \nabla loss(Param)|_{Param = Param_0,X=X_0,y=y_0}
    5. 使用mni_batch更新参数Param,\eta为学习率
      G_{itr} = \nabla loss(Param)|_{Param = Param_{itr},x=x_{batch},y=y_{batch}} \\ Param_{itr+1} = Param_{itr} -G_{itr} * \eta
    6. (可视化时可选)
      周期性地记录train_acc和test_acc,最后用这两组记录绘制学习曲线
    7. 达到最大迭代次数后返回Param_{maxitr}

    流程图表示如下


    正向传播的二层神经网络

    小结

    1. 机器学习中使用数据集分为训练数据集和测试数据集
    2. 神经网络用训练数据进行学习,并用测试数据评价学习到的模型的泛化能力
    3. 神经网络的学习以损失函数为指标,更新权重参数,以使损失函数的值减小
    4. 利用某个给定的微小值的差分求导数的过程(导数定义),称为数值微分
    5. 利用数值微分,可以计算权重参数的梯度
    6. 数值微分虽然简单但是费时间,另一种高速计算导数的方法叫做误差的反向传播法

    相关文章

      网友评论

          本文标题:神经网络的训练

          本文链接:https://www.haomeiwen.com/subject/dfrpfctx.html