人工神经网络与梯度下降法

1 人工神经网络

人工神经网络(Artificial Neural Networks, ANN)是模拟生物神经元结构的计算模型,它模仿了大脑处理信息的基本方式。人工神经网络是由大量的简单处理单元——即“神经元”——组成的网络,这些神经元通过连接权重进行交互,并能够对输入数据进行复杂的非线性变换。

1.1 工作原理

人工神经网络通过调整连接权重来学习数据中的模式。这个过程通常涉及以下几个步骤:

  1. 前向传播:输入数据通过网络向前传递,从输入层到输出层,经过一系列的加权和激活操作。
  2. 损失计算:输出层产生的结果与实际目标进行比较,得到一个误差度量,称为损失函数。
  3. 反向传播:通过计算损失函数相对于每个权重的梯度,然后根据这个梯度调整权重,以减小损失。
  4. 优化算法:如梯度下降等方法用于更新权重,目的是最小化损失函数。

1.2 人工神经网络的组成

  1. 神经元(Neuron):是神经网络的基本单元,类似于生物神经元的结构。
  2. 输入层(Input Layer):接收外部输入数据。
  3. 隐藏层(Hidden Layer):一个或多个,负责处理输入层传来的数据,并进行非线性变换。
  4. 输出层(Output Layer):输出最终结果。

1.3 数学原理

  1. 权重(Weight):每个神经元之间的连接都有一个权重,表示连接的强度。
  2. 偏置(Bias):每个神经元都有一个偏置,用于调整输出值。
  3. 激活函数(Activation Function):用于引入非线性因素,常见的激活函数有Sigmoid、ReLU等。
    以下是神经网络的基本数学原理:
1.3.1 前向传播(Forward Propagation)

单个神经元示意图:
在这里插入图片描述

对于一个简单的神经元,其输出计算公式为:
a = σ ( ∑ i = 1 n w i x i + b ) a = \sigma(\sum_{i=1}^{n} w_i x_i + b) a=σ(i=1nwixi+b)
其中:

  • a a a:神经元的输出
  • σ \sigma σ:激活函数
  • w i w_i wi:第 i i i个输入的权重
  • x i x_i xi:第 i i i个输入
  • b b b:偏置
    对于多层神经网络,前向传播的过程可以表示为:
    z [ l ] = W [ l ] a [ l − 1 ] + b [ l ] z^{[l]} = W^{[l]} a^{[l-1]} + b^{[l]} z[l]=W[l]a[l1]+b[l]
    a [ l ] = σ ( z [ l ] ) a^{[l]} = \sigma(z^{[l]}) a[l]=σ(z[l])
    其中:
  • z [ l ] z^{[l]} z[l]:第 l l l层的线性组合
  • W [ l ] W^{[l]} W[l]:第 l l l层的权重矩阵
  • a [ l − 1 ] a^{[l-1]} a[l1]:第 l − 1 l-1 l1层的输出
  • b [ l ] b^{[l]} b[l]:第 l l l层的偏置
  • a [ l ] a^{[l]} a[l]:第 l l l层的输出
1.3.2 激活函数示例

Sigmoid函数
σ ( z ) = 1 1 + e − z \sigma(z) = \frac{1}{1 + e^{-z}} σ(z)=1+ez1
ReLU函数
ReLU ( z ) = max ⁡ ( 0 , z ) \text{ReLU}(z) = \max(0, z) ReLU(z)=max(0,z)

1.4 简单示例

假设我们有一个简单的神经网络,只有一个输入层、一个隐藏层和一个输出层。输入层有一个神经元,隐藏层有两个神经元,输出层有一个神经元。激活函数使用Sigmoid。

输入层到隐藏层的计算

设输入为 x x x,隐藏层两个神经元的权重分别为 w 1 w_1 w1 w 2 w_2 w2,偏置分别为 b 1 b_1 b1 b 2 b_2 b2,则隐藏层的输出为:
z 1 = w 1 x + b 1 z_1 = w_1 x + b_1 z1=w1x+b1
a 1 = σ ( z 1 ) a_1 = \sigma(z_1) a1=σ(z1)
z 2 = w 2 x + b 2 z_2 = w_2 x + b_2 z2=w2x+b2
a 2 = σ ( z 2 ) a_2 = \sigma(z_2) a2=σ(z2)

隐藏层到输出层的计算

设隐藏层到输出层的权重分别为 v 1 v_1 v1 v 2 v_2 v2,偏置为 c c c,则输出层的输出为:
z out = v 1 a 1 + v 2 a 2 + c z_{\text{out}} = v_1 a_1 + v_2 a_2 + c zout=v1a1+v2a2+c
a out = σ ( z out ) a_{\text{out}} = \sigma(z_{\text{out}}) aout=σ(zout)
这就是一个简单的人工神经网络的数学原理和计算过程。在实际应用中,神经网络的结构和参数需要通过训练数据来学习得到。
如图:在这里插入图片描述

由上图我们约定以下表示。a1、a2、h1、h2…代表神经元的名字。
a 1 i a1_i a1i代表a1神经元的输入, a 1 o a1_o a1o代表a1神经元的输出。
a1与a2代表输入层,通常情况下输入层通常不包含权重和激活函数,它仅仅接收数据。
2与3是当前神经网络的输入。当2输入到a1神经元后即 a 1 i = 2 a1_i=2 a1i=2,由于a1是输入层神经元,从而变成 a 1 o = a 1 i = 2 a1_o = a1_i=2 a1o=a1i=2
当3输入到神经元后,同理,从而变成 a 2 o = a 2 i = 3 a2_o= a2_i=3 a2o=a2i=3
此时神经元分别输出 a 1 o a1_o a1o a 2 o a2_o a2o
从图中我们可以看出, a 1 o a1_o a1o a 2 o a2_o a2o首先会作为隐藏层(中间那一列的神经元)的输入。
对于隐藏层神经元我们可以得到
h 1 i = a 1 o ∗ 1 + a 2 o ∗ 2 h1_i =a1_o*1+a2_o*2 h1i=a1o1+a2o2
h 1 o = σ ( h 1 i + b ) h1_o = \sigma(h1_i+ b) h1o=σ(h1i+b)
h 2 i = a 1 o ∗ 2 + a 2 o ∗ 3 h2_i =a1_o*2+a2_o*3 h2i=a1o2+a2o3
h 2 o = σ ( ( h 2 i + b ) + b ) h2_o = \sigma((h2_i+ b)+ b) h2o=σ((h2i+b)+b)

注意
在通常情况下,输入层通常不包含权重和激活函数,它的主要功能是接收外部输入数据并将其传递给网络的下一层次,即隐藏层。输入层的节点(或称为神经元)只是简单地持有输入数据的值,并没有进行任何计算或变换。
思考
1、你可以把其它几个神经元的输入输出写出来了吗?
2、我们如何用计算机能看懂的方式去实现计算呢?

输入层定义

给定输入向量 x = [ x 1 , x 2 ] = [ 2 , 3 ] \mathbf{x} = [x_1, x_2] = [2, 3] x=[x1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值