第七天:机器学习:神经网络-正向传播算法

在第六天的学习中我们对神经网络有了一个大概的了解,今天我们来细讲***神经网络-正向传播算法***

正向传播(Forward Propagation)详细讲解

正向传播的基本概念

正向传播是指将输入数据逐层传递,通过神经元的计算和激活函数的作用,最终得到输出结果的过程。在这一过程中,每一层的神经元根据前一层的输出进行计算,并通过激活函数得到输出值。

神经网络结构概述

在介绍正向传播算法之前,首先了解一下神经网络的基本结构:

  • 输入层:接受原始数据输入,通常不进行计算,只是简单地传递数据。
  • 隐藏层:包含多个神经元,对输入数据进行复杂的特征提取和处理。隐藏层可以有多层,这使得神经网络具备强大的学习能力。
  • 输出层:将最后一层隐藏层的输出进行处理,生成最终的预测结果。
激活函数的作用

激活函数用于引入非线性特性,使神经网络能够学习复杂的模式。如果没有激活函数,神经网络的每一层都只是线性变换,整个网络只能表达线性关系。常见的激活函数包括:

  • ReLU(Rectified Linear Unit) f ( x ) = max ⁡ ( 0 , x ) f(x) = \max(0, x) f(x)=max(0,x)
  • Sigmoid f ( x ) = 1 1 + e − x f(x) = \frac{1}{1 + e^{-x}} f(x)=1+ex1
  • Tanh(双曲正切函数) f ( x ) = tanh ⁡ ( x ) f(x) = \tanh(x) f(x)=tanh(x)
正向传播的步骤详细说明

正向传播的基本步骤如下:

  1. 输入数据的传递:输入层将数据传递到第一隐藏层。
  2. 各层神经元的计算过程:每个神经元计算加权输入的线性组合,然后通过激活函数得到输出。
  3. 最终输出的计算:输出层神经元将最后一隐藏层的输出进行处理,得到最终结果。

让我们通过一个具体的示例来详细说明这些步骤。

示例:单隐藏层神经网络的正向传播

假设我们有一个简单的神经网络,包含一个输入层、一个隐藏层和一个输出层。输入层有两个输入特征 x 1 x_1 x1 x 2 x_2 x2,隐藏层有两个神经元,输出层有一个神经元。

第一步:输入层到隐藏层

输入层直接将输入数据传递到隐藏层。假设输入数据为 [ x 1 , x 2 ] [x_1, x_2] [x1,x2]

第二步:隐藏层的计算

隐藏层的每个神经元进行以下计算:
z 1 = w 11 ⋅ x 1 + w 12 ⋅ x 2 + b 1 z_1 = w_{11} \cdot x_1 + w_{12} \cdot x_2 + b_1 z1=w11x1+w12x2+b1

a 1 = f ( z 1 ) a_1 = f(z_1) a1=f(z1)

z 2 = w 21 ⋅ x 1 + w 22 ⋅ x 2 + b 2 z_2 = w_{21} \cdot x_1 + w_{22} \cdot x_2 + b_2 z2=w21x1+w22x2+b2

a 2 = f ( z 2 ) a_2 = f(z_2) a2=f(z2)

其中, w i j w_{ij} wij是输入到隐藏层的权重, b i b_i bi是偏置, f f f是激活函数, z z z是线性组合的结果, a a a 是激活函数的输出。

第三步:隐藏层到输出层

隐藏层的输出作为输入传递到输出层,输出层的神经元进行以下计算:
z 3 = w 31 ⋅ a 1 + w 32 ⋅ a 2 + b 3 z_3 = w_{31} \cdot a_1 + w_{32} \cdot a_2 + b_3 z3=w31a1+w32a2+b3

y = f ( z 3 ) y = f(z_3) y=f(z3)

其中, w 3 i w_{3i} w3i 是隐藏层到输出层的权重, b 3 b_3 b3 是输出层的偏置, y y y是最终的输出。

具体示例代码

下面是一个使用Python和NumPy实现的简单单隐藏层神经网络的正向传播过程:

import numpy as np

# 定义激活函数(ReLU)
def relu(x):
    return np.maximum(0, x)

# 输入数据
inputs = np.array([0.5, 0.2])

# 权重和偏置
weights_input_hidden = np.array([[0.1, 0.2], [0.3, 0.4]])
bias_hidden = np.array([0.1, 0.2])
weights_hidden_output = np.array([0.5, 0.6])
bias_output = 0.1

# 正向传播:输入层到隐藏层
hidden_layer_input = np.dot(inputs, weights_input_hidden) + bias_hidden
hidden_layer_output = relu(hidden_layer_input)

# 正向传播:隐藏层到输出层
output_layer_input = np.dot(hidden_layer_output, weights_hidden_output) + bias_output
output = relu(output_layer_input)

print("隐藏层输出:", hidden_layer_output)
print("最终输出:", output)

在这个示例中,我们定义了一个简单的神经网络,并通过正向传播计算得到最终输出。我们使用ReLU作为激活函数,并初始化了权重和偏置。通过这个示例,我们可以清楚地看到正向传播的每一步计算过程。

总结

正向传播是神经网络中的基本过程,通过将输入数据逐层传递和计算,最终得到输出结果。激活函数在正向传播中起到了关键作用,使神经网络能够学习和表达复杂的非线性关系。通过理解和实现正向传播算法,初学者可以深入理解神经网络的工作原理,为进一步学习和应用打下坚实基础。

  • 12
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值