目录
-
- 网络结构
- 数学模型
- Python实现
有监督神经网络是一种通过标注数据进行训练的深度学习模型,它可以学习输入和输出之间的映射关系,并用于分类和预测新数据。本文将介绍有监督神经网络的工作原理、数学模型以及使用Python实现一个简单例子。
网络结构
有监督神经网络的基本结构的示意图:
输入层 (Input Layer) 隐藏层 (Hidden Layer(s)) 输出层 (Output Layer) +------------+ +------------+ +------------+ | 输入 1 | - | 隐藏神经元 | - | 输出神经元 | | (Feature 1)| | (Neuron) | | (Neuron) | +------------+ +------------+ +------------+ | 输入 2 | | 隐藏神经元 | | | | (Feature 2)| >- - - - - - - - -| (Neuron) | >- - - - - - - - -| | +------------+ / +------------+ / +------------+ | ... | / | ... | / | | | (Features) | - | (Neurons) | - | | +------------+ +------------+ +------------+ | 输入 N | | 隐藏神经元 | | 输出神经元 | | (Feature N)| - - - - - - - - - - - -| (Neuron) | - - - - - - - - - - - -| (Neuron) | +------------+ +------------+ +------------+
在这个示意图中:
-
输入层 (Input Layer): 这是神经网络的第一层,由输入特征组成。每个输入特征对应一个神经元。这些神经元将数据传递给下一层。
-
隐藏层 (Hidden Layer(s)): 网络可以有一个或多个隐藏层。隐藏层的神经元对输入数据进行变换和特征提取。每个隐藏层的神经元与前一层的每个神经元通过加权连接,并且通常会有一个偏置项。隐藏层中的神经元应用激活函数来引入非线性。
-
输出层 (Output Layer): 这是神经网络的最后一层,它产生网络的输出。输出层的设计取决于特定任务(例如,分类或回归)。对于多类分类任务,输出层的每个神经元通常对应一个类别,并且可能会使用softmax激活函数来产生概率分布。对于回归任务,输出层可能只有一个神经元,用于输出连续值。
在训练过程中,网络使用有监督学习,这意味着每个输入样本都有一个对应的目标输出。网络的预测输出与目标输出之间的差异通过损失函数来衡量,然后通过反向传播算法来调整网络权重,以减少这个差异。
数学模型
在文本中,我可以为你描述一个简单的神经网络的数学模型。考虑一个包含输入层、一个隐藏层和一个输出层的前馈神经网络。对于这个网络,我们可以用以下方式表示其数学模型:
#输入层: x = [x1, x2, ..., xn]^T #权重矩阵 (从输入层到隐藏层): W1 = [w11, w12, ..., w1m; w21, w22, ..., w2m; ...; wn1, wn2, ..., wnm] #偏置向量 (隐藏层): b1 = [b11, b12, ..., b1m]^T #隐藏层激活函数: f(·) #隐藏层输出 (经过激活函数): h = f(W1 * x + b1) #权重矩阵 (从隐藏层到输出层): W2 = [w21, w22, ..., w2k; ...; wm1, wm2, ..., wmk] #偏置向量 (输出层): b2 = [b21, b22, ..., b2k]^T #输出层激活函数: g(·) #输出层输出 (经过激活函数): y = g(W2 * h + b2)
在这个数学模型中:
- x 是输入向量,包含
n 个特征。 - W1 是从输入层到隐藏层的权重矩阵。
- b1 是隐藏层的偏置向量。
- f(·) 是隐藏层的激活函数,例如ReLU或Sigmoid。
- h 是隐藏层的输出向量,经过激活函数处理。
- W2 是从隐藏层到输出层的权重矩阵。
- b2 是输出层的偏置向量。
- g(·) 是输出层的激活函数,可以是Sigmoid(用于二分类)、Softmax(用于多分类)或恒等函数(用于回归)。
- y 是输出向量,包含
k 个输出,对应于分类问题中的类别或回归问题中的预测值。
每个神经元的输出是其输入的加权和,再通过一个激活函数进行非线性变换。整个网络通过反向传播算法进行训练,通过调整权重(W1, W2)和偏置(b1, b2)来最小化预测输出和实际输出之间的差异。
Python实现
下面使用Keras实现一个简单的二分类网络:
from tensorflow.keras import models, layers model = models.Sequential() model.add(layers.Dense(64, activation='relu', input_shape=(32,))) model.add(layers.Dense(1, activation='sigmoid')) model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['accuracy']) model.fit(x_train, y_train, epochs=10)
该网络包含一个隐藏层,ReLU作为激活函数,Sigmoid作为输出层激活函数。