【基础】神经网络基础结构与前向传播过程
发布时间: 2024-06-25 03:11:52 阅读量: 70 订阅数: 114
![【基础】神经网络基础结构与前向传播过程](https://i2.hdslb.com/bfs/archive/65f22a17dbb55f69685ea6c26bac07ae98f511ee.jpg@960w_540h_1c.webp)
# 1. 神经网络基础概念**
神经网络是一种受生物神经系统启发的机器学习模型。它由相互连接的节点(神经元)组成,这些节点可以处理信息并学习模式。神经网络通过训练大量数据来学习,从而能够识别复杂模式并做出预测。
神经网络的基本结构包括输入层、隐藏层和输出层。输入层接收输入数据,隐藏层处理数据并提取特征,输出层生成预测。神经元通过权重和偏差相互连接,这些权重和偏差在训练过程中进行调整,以最小化损失函数。
# 2. 神经网络前向传播
### 2.1 前向传播的原理和步骤
神经网络的前向传播是指输入数据通过神经网络的各层,逐层计算输出的过程。其原理如下:
1. **输入层:**输入数据作为神经网络的第一层,直接传递给下一层。
2. **隐含层:**输入层的数据经过权重矩阵和偏置项的线性变换,再通过激活函数得到隐含层的输出。
3. **输出层:**隐含层的输出作为输出层的输入,同样经过线性变换和激活函数,得到神经网络的最终输出。
前向传播的步骤如下:
1. 初始化神经网络的权重和偏置项。
2. 将输入数据输入到输入层。
3. 计算隐含层的输出:`h = f(Wx + b)`,其中 `W` 为权重矩阵,`x` 为输入数据,`b` 为偏置项,`f` 为激活函数。
4. 计算输出层的输出:`y = f(Wh + b)`,其中 `W` 为权重矩阵,`h` 为隐含层的输出,`b` 为偏置项,`f` 为激活函数。
### 2.2 激活函数和损失函数
**激活函数**用于引入非线性,使神经网络能够学习复杂的关系。常用的激活函数包括:
* Sigmoid 函数:`f(x) = 1 / (1 + e^(-x))`
* Tanh 函数:`f(x) = (e^x - e^(-x)) / (e^x + e^(-x))`
* ReLU 函数:`f(x) = max(0, x)`
**损失函数**用于衡量神经网络预测输出与真实输出之间的差异。常用的损失函数包括:
* 均方误差:`L = 1/2 * (y - y_true)^2`
* 交叉熵损失:`L = -y_true * log(y) - (1 - y_true) * log(1 - y)`
### 2.3 多层神经网络的前向传播
多层神经网络是由多个隐含层组成的,前向传播的步骤与单层神经网络类似。对于一个 L 层的神经网络,前向传播的公式如下:
```python
for l in range(1, L):
h[l] = f(W[l] * h[l-1] + b[l])
y = f(W[L] * h[L-1] + b[L])
```
其中:
* `h[l]` 为第 `l` 层的隐含层输出
* `W[l]` 为第 `l` 层的权重矩阵
* `b[l]` 为第 `l` 层的偏置项
* `y` 为神经网络的输出
* `f` 为激活函数
**代码块:**
```python
import numpy as np
# 定义一个三层神经网络
class ThreeLayerNeuralNetwork:
def __init__(self, input_size, hidden_size, output_size):
self.W1 = np.random.randn(input_size, hidden_size)
self.b1 = np.zeros((1, hidden_size))
self.W2 = np.random.randn(hidden_size, output_size)
self.b2 = np.zeros((1, output_size))
def forward(self, x):
h1 = np.maximum(0, np.dot(x, self.W1) + self.b1) # ReLU 激活函数
y = np.dot(h1, self.W2) + self.b2
return y
```
**逻辑分析:**
该代码块实现了三层神经网络的前向传播过程。输入数据 `x` 首先经过第一层隐含层的线性变换和 ReLU 激活函数,得到隐含层输出 `h1`。然后,`h1` 经过第二层线性变换得到神经网络的输出 `y`。
**参数说明:**
* `input_s
0
0