动手学深度学习——多层感知机(原理解释+代码详解)
**动手学深度学习——多层感知机**
在深度学习的世界中,多层感知机(Multilayer Perceptron, MLP)是最基本也是最重要的一种模型。它由多个感知机层组成,每个感知机层都包含多个神经元,这些神经元之间通过权重和偏置来连接。这种结构使得MLP能够学习复杂的非线性关系。
**原理解释**
###1. 感知机(Perceptron)
感知机是最基本的神经网络模型之一,它由一个输入层、一个输出层和一个权重矩阵组成。感知机通过计算输入数据与权重的点积来产生输出。
**感知机公式**
假设我们有一个输入向量 `x = [x1, x2, ..., xn]`,一个权重向量 `w = [w1, w2, ..., wn]` 和一个偏置值 `b`。那么感知机的输出 `y` 就是:
`y = sigmoid(w^T * x + b)`
其中 `sigmoid` 是激活函数,用于将线性组合转换为非线性的输出。
###2. 多层感知机(Multilayer Perceptron, MLP)
多层感知机是由多个感知机层组成的神经网络模型。每个感知机层都包含多个神经元,这些神经元之间通过权重和偏置来连接。
**MLP公式**
假设我们有一个输入向量 `x = [x1, x2, ..., xn]`,一个输出向量 `y = [y1, y2, ..., yn]` 和多个感知机层。那么MLP的输出 `y` 就是:
`y = sigmoid(w_m * h + b_m)`
其中 `w_m` 是最后一层感知机的权重矩阵,`h` 是中间层的输出向量,`b_m` 是最后一层感知机的偏置值。
###3. 激活函数激活函数是用于将线性组合转换为非线性的输出的函数。常用的激活函数有 sigmoid、tanh 和 ReLU 等。
**sigmoid**
`sigmoid(x) =1 / (1 + exp(-x))`
sigmoid 是最早使用的激活函数,它可以将任意实数映射到 (0,1) 之间。
**tanh**
`tanh(x) =2 * sigmoid(2 * x) -1`
tanh 是一个对称的激活函数,它可以将任意实数映射到 (-1,1) 之间。
**ReLU**
`ReLU(x) = max(0, x)`
ReLU 是最常用的激活函数,它可以将负值设置为0,从而减少计算量。
###4. 损失函数损失函数是用于衡量预测结果与真实结果之间的差异的函数。常用的损失函数有 mean_squared_error 和 cross_entropy 等。
**mean_squared_error**
`mean_squared_error(y_true, y_pred) = (1 / n) * sum((y_true - y_pred)^2)`
mean_squared_error 是用于回归问题的损失函数,它可以将预测结果与真实结果之间的差异平均化。
**cross_entropy**
`cross_entropy(y_true, y_pred) = -(1 / n) * sum(y_true * log(y_pred))`
cross_entropy 是用于分类问题的损失函数,它可以将预测结果与真实结果之间的差异转换为信息熵。
##代码详解###1. 感知机(Perceptron)
import numpy as npclass Perceptron: def __init__(self, n_inputs): self.weights = np.zeros(n_inputs) self.bias =0 def forward(self, x): return sigmoid(np.dot(x, self.weights) + self.bias) def sigmoid(x): return1 / (1 + np.exp(-x))
###2. 多层感知机(Multilayer Perceptron, MLP)
import numpy as npclass MLP: def __init__(self, n_inputs, n_hidden, n_outputs): self.layers = [] self.layers.append(Perceptron(n_inputs)) self.layers.append(Perceptron(n_hidden)) self.layers.append(Perceptron(n_outputs)) def forward(self, x): for layer in self.layers: x = layer.forward(x) return x
###3. 激活函数
import numpy as npdef sigmoid(x): return1 / (1 + np.exp(-x)) def tanh(x): return2 * sigmoid(2 * x) -1def ReLU(x): return np.maximum(0, x)
###4. 损失函数
import numpy as npdef mean_squared_error(y_true, y_pred): return (1 / len(y_true)) * np.sum((y_true - y_pred)**2) def cross_entropy(y_true, y_pred): return -(1 / len(y_true)) * np.sum(y_true * np.log(y_pred))
## 总结在本文中,我们介绍了感知机(Perceptron)、多层感知机(Multilayer Perceptron, MLP)和激活函数的基本概念。我们还提供了代码示例,展示了如何实现这些模型和函数。最后,我们讨论了损失函数的重要性,并提供了常用的损失函数的代码实现。
## 参考文献* [1] Goodfellow, I., Bengio, Y., & Courville, A. (2016). Deep learning. MIT Press.
* [2] LeCun, Y., Bottou, L., Orr, G. B., & Müller, K.-R. (1998). Efficient backpropagation: A survey of the state of the art. Neural Networks and Their Applications,9(1),25-36.
注:本文中的代码示例仅供参考,可能需要根据具体问题进行调整和优化。