欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

初探机器学习:理解神经网络与反向传播的原理详解

最编程 2024-07-24 22:30:31
...

这是我参与8月更文挑战的第8天,活动详情查看:8月更文挑战

本文为吴恩达机器学习课程的笔记系列第二篇,主要学习神经网络前向传播与反向传播的算法原理及推导。

神经网络基础

概念介绍

人工神经网络(Artificial Neural Network)简称神经网络(NN)。神经网络是一种模拟人体神经元结构的数学模型,其神经元的连接是固定的。靠正向和反向传播来更新神经元。简单来说,神经网络是由一连串的神经层组成,每一层神经层里面存在有很多的神经元。

神经网络从逻辑上可以分为三层:

  • 输入层(Input Layer):第一层,接收特征 xx
  • 输出层(Output Layer):最后一层,输出最终预测的假设 hh
  • 隐藏层(HiddenLayers):中间层,并不直接可见。

特点:

  • 每一种神经网络都会有输入输出值
  • 如何被训练:
    • 大量的数据集
    • 成千上万次的训练
    • 错误中学习经验,对比预测答案与真实答案差别,反向传播改进识别。

下面以最简单的二层神经网络为例来具体介绍:

请添加图片描述

在上图神经网络中,记输入特征向量为 xx ,权重参数矩阵 WW ,偏置参数 bbaa 表示每个神经元的输出,上标表示神经网络的层数(隐藏层为1)。

公式:

  • z=WTx+bz=W^Tx+b
  • a=g(z)=11+eza=g(z)=\dfrac{1}{1+e^{-z}}

神经网络的计算步骤:

  • 首先计算第一层网络中各节点相关数 z[1]=W[1]Tx+bz^{[1]}=W^{[1]^T} x+b
  • 使用激活函数计算 a[1]=g(z[1])a^{[1]} = g(z^{[1]})
  • 下一层同理,如此计算,直至输出最后的 a[2]a^{[2]}
  • 可得最终的损失函数 Loss(a[2],y)Loss(a^{[2]},y)

向量化计算

第一层公式:

[z1[1]z2[1]z3[1]]3×1=[W11[1]T...W21[1]T...W31[1]T...]3×3[x1x2x3]3×1+[b1[1]b2[1]b3[1]]3×1\begin{bmatrix}z_1^{[1]} \\z_2^{[1]} \\z_3^{[1]} \end{bmatrix}_{3\times1}=\begin{bmatrix}W_{11}^{[1]^T}...\\W_{21}^{[1]^T}...\\W_{31}^{[1]^T}...\\\end{bmatrix}_{3\times3}*\begin{bmatrix}x_1\\x_2\\x_3\\ \end{bmatrix}_{3\times1}+\begin{bmatrix}b_1^{[1]}\\b_2^{[1]}\\b_3^{[1]}\\\end{bmatrix}_{3\times1}

[a1[1]a2[1]a3[1]]3×1=[g(z1[1])g(z2[1])g(z3[1])]3×1\begin{bmatrix}a_1^{[1]} \\a_2^{[1]} \\a_3^{[1]} \end{bmatrix}_{3\times1}=\begin{bmatrix}g(z_1^{[1]})\\g(z_2^{[1]}) \\g(z_3^{[1]}) \end{bmatrix}_{3\times1}

第二层公式:

[z[2]]1×1=[W11[2]T...]1×3[a1[1]a2[1]a3[1]]3×1+[b[2]]1×1\begin{bmatrix}z^{[2]}\end{bmatrix}_{1\times1}=\begin{bmatrix}W_{11}^{[2]^T}...\end{bmatrix}_{1\times3}*\begin{bmatrix}a_1^{[1]} \\a_2^{[1]} \\a_3^{[1]} \end{bmatrix}_{3\times1}+\begin{bmatrix}b^{[2]}\end{bmatrix}_{1\times1}

上一篇: PyTorch实战指南07:理解nn.Module类与forward函数的深度剖析

下一篇: 深度学习中遇到的问题:运行时错误 - 找到了不同设备(cuda:0 和 cpu),期望所有张量在同一个设备上!