概念
神经网络是一种机器学习模型,受到人脑神经元网络的启发而设计。它可以用来解决各种各样的问题,包括图像识别、自然语言处理、语音识别、游戏策略等。神经网络的核心思想是通过一系列的层次结构,从原始数据中自动地学习和提取特征,然后进行预测或分类。
核心概念
神经元(Neuron):神经元是神经网络的基本单元。每个神经元接收一组输入,进行一些计算,并产生一个输出。神经元的计算通常包括加权和(将输入乘以权重)和非线性变换(例如激活函数)。
层(Layer):神经网络通常由多个层组成。每一层都由一组神经元组成,它们共同学习某些特征或模式。神经网络一般包括输入层、若干隐藏层和输出层。
前向传播(Forward Propagation):前向传播是神经网络中的计算过程,从输入层开始,逐层计算并传递信号,最终得到输出。在前向传播过程中,每个神经元计算其加权和并通过激活函数产生输出。
激活函数(Activation Function):激活函数引入了非线性性质,允许神经网络学习非线性函数。常用的激活函数包括 Sigmoid、ReLU(Rectified Linear Unit)、Tanh 等。
权重(Weights)和偏置(Biases):神经元之间的连接有权重,权重控制了输入对神经元的影响程度。每个神经元还有一个偏置项,用来调整神经元的输出。
损失函数(Loss Function):损失函数用来衡量神经网络的输出与实际标签之间的差距。训练神经网络的目标是最小化损失函数。
反向传播(Backpropagation):反向传播是训练神经网络的关键步骤。它通过计算损失函数对于权重和偏置的梯度,然后使用梯度下降等优化算法来更新网络的参数,从而减小损失函数。
优化算法(Optimization Algorithms):梯度下降是神经网络训练的基本优化算法。其他高级算法如随机梯度下降、Adam、RMSProp等也被广泛使用,以加快收敛和优化过程。
深度学习(Deep Learning):深度学习是一种特殊类型的神经网络,具有多个隐藏层。深度学习模型具有更强大的表达能力,可以学习到更抽象的特征和模式。
过拟合(Overfitting):神经网络容易在训练数据上过度拟合,导致在测试数据上性能下降。常用的解决方法包括正则化、早停等。
代码实现
python
import numpy as np
# 生成模拟数据
np.random.seed(42)
m = 100
n_input = 2
n_hidden = 4
n_output = 1
X = np.random.randn(m, n_input)
y = (X[:, 0] + X[:, 1] > 0).astype(int)
# 定义激活函数(Sigmoid)
def sigmoid(z):
return 1 / (1 + np.exp(-z))
# 初始化权重和偏置
W1 = np.random.randn(n_input, n_hidden)
b1 = np.zeros((1, n_hidden))
W2 = np.random.randn(n_hidden, n_output)
b2 = np.zeros((1, n_output))
# 定义前向传播
def forward_propagation(X):
z1 = X.dot(W1) + b1
a1 = sigmoid(z1)
z2 = a1.dot(W2) + b2
a2 = sigmoid(z2)
return a2
# 计算损失函数(交叉熵损失)
def compute_loss(y_pred, y_true):
m = len(y_true)
loss = (-1/m) * np.sum(y_true * np.log(y_pred) + (1 - y_true) * np.log(1 - y_pred))
return loss
# 执行前向传播
y_pred = forward_propagation(X)
# 计算损失
loss = compute_loss(y_pred, y)
print("损失:", loss)