📅  最后修改于: 2023-12-03 15:21:39.404000             🧑  作者: Mango
多层前馈网络(Multilayer Feedforward Network)是一种基本的人工神经网络,也被称为前馈神经网络(Feedforward Neural Network),它是一种最简单、最基础的网络结构模型之一。多层前馈网络通过将多个神经元按特定的权重和偏置级联堆叠,通过映射输入和输出之间的复杂非线性关系来学习模式。
多层前馈网络由三部分组成:
1.输入层:将原始数据输入网络中。
2.隐层(隐藏层):对输入层的特征进行分析和抽象,从而提取出有意义的中间特征。
3.输出层:将隐层的结果映射到最终的输出结果上。
多层前馈网络中的前馈是指信号从输入层到输出层的单向传递。在数据从输入层通过隐含层到达输出层的过程中,信号并没有沿着相同的路径弹回来。而反馈是指信号在前馈信号的基础上增加了一条反馈通路,将输出层的信号反过来传送到输入层或隐含层。
在多层前馈网络中,反向传播(Backpropagation)算法是最常用的训练方法。反向传播算法是一种基于梯度下降法的优化算法,通过不断地迭代调整网络的权重和偏置,最终让网络输出结果与实际结果之间的误差尽可能地小。
同时,反向传播算法还需要依靠链式法则(chain rule)来计算误差对各个参数的梯度,进而进行反向传播调整。
以下是一个简单的多层前馈网络的 Python 代码示例:
import numpy as np
class MultilayerPerceptron:
def __init__(self, input_size, hidden_size, output_size):
self.input_size = input_size
self.hidden_size = hidden_size
self.output_size = output_size
self.weights1 = np.random.randn(self.input_size, self.hidden_size)
self.biases1 = np.zeros((1, self.hidden_size))
self.weights2 = np.random.randn(self.hidden_size, self.output_size)
self.biases2 = np.zeros((1, self.output_size))
def forward(self, X):
self.z1 = np.dot(X, self.weights1) + self.biases1
self.a1 = np.tanh(self.z1)
self.z2 = np.dot(self.a1, self.weights2) + self.biases2
exp_scores = np.exp(self.z2)
self.probs = exp_scores / np.sum(exp_scores, axis=1, keepdims=True)
return self.probs
def backward(self, X, y, learning_rate=0.1):
delta3 = self.probs
delta3[range(X.shape[0]), y] -= 1
dweights2 = np.dot(self.a1.T, delta3)
dbiases2 = np.sum(delta3, axis=0, keepdims=True)
delta2 = np.dot(delta3, self.weights2.T) * (1 - np.power(self.a1, 2))
dweights1 = np.dot(X.T, delta2)
dbiases1 = np.sum(delta2, axis=0)
self.weights1 -= learning_rate * dweights1
self.biases1 -= learning_rate * dbiases1
self.weights2 -= learning_rate * dweights2
self.biases2 -= learning_rate * dbiases2
def train(self, X, y, num_epochs=20000, learning_rate=0.1):
for epoch in range(num_epochs):
self.forward(X)
self.backward(X, y)
if epoch % 1000 == 0:
loss = self.calc_loss(X, y)
print(f"Loss after epoch {epoch}: {loss}")
def predict(self, X):
probs = self.forward(X)
return np.argmax(probs, axis=1)
def calc_loss(self, X, y):
num_examples = len(X)
correct_probs = self.probs[range(num_examples), y]
cross_entropy_loss = -np.log(correct_probs)
loss = np.sum(cross_entropy_loss)
return loss
多层前馈网络是一种基本的神经网络结构,它通过权重和偏差的组合,将输入数据映射到输出数据上。在训练过程中,可以使用反向传播算法来调整网络的参数,以达到最小化误差的目的。