1.感知机

1.1 什么是感知机

感知机是一种最简单的人工神经网络模型,它模拟了生物神经元的工作原理,基本结构是单个神经元,接收多个输入信号,将每个输入乘以对应的权重,求和后加上偏置,再经过一个激活函数处理输出结果。

数学模型可以表示为:498b3ded61e4457482e9ff4919c9e388.png

其中 eq?x_%7Bi%7D是输入值,eq?w_%7Bi%7D是权重,eq?b是偏置,eq?f是激活函数,常见的激活函数如修正线性单元(Rectified linear unit,ReLU)。

9514d29a6c51485ba7fc8187db03ce9d.png

1.2 感知机的局限性

感知机只能处理线性可分的数据,即可以用一条直线(二维空间)或者一个超平面(高维空间)将不同类别的数据完全分开。面对像异或(XOR)这样简单的非线性可分问题时,单一的感知机模型就无法正确分类。

885dc4b1348b4760baec481668a68a19.png

观察图中的数据点,绿色点 (0,0) 和 (1,1) 属于一类,红色点 (0,1) 和 (1,0) 属于另一类。如果尝试用一条直线(超平面)来划分这些点,会发现无论怎样画直线,都无法将绿色点和红色点完全分开。例如,一条水平直线会把 (0,0) 和 (0,1) 分错;一条垂直直线会把 (0,0) 和 (1,0) 分错;而一条斜直线也无法同时将两类点正确分开。这是因为异或问题的数据在二维空间中是线性不可分的,而感知机只能处理线性可分的数据。

2.多层感知机

2.1 什么是多层感知机

多层感知机是在感知机基础上发展而来,它包含多个神经元层,典型结构有输入层、一个或多个隐藏层以及输出层 。隐藏层的神经元可以自动提取输入数据的复杂特征,使得模型能够处理线性不可分的复杂数据模式。每一层神经元都把前一层的输出当作输入,进行加权求和与激活函数运算,逐步转换数据的表征。

2.2 多层感知机的优势

由于存在多个隐藏层,多层感知机可以拟合任意复杂的非线性函数,只要隐藏层神经元数量足够多。这使其广泛应用于图像识别、语音识别、自然语言处理等众多领域,是深度学习早期非常重要的模型架构。

a34a9978bf784ed8b92981189285e3e9.png

2.3 多层感知机的应用

一、图像识别

  1. 物体识别
    • 在安防监控领域,多层感知机可以对监控视频中的物体进行识别,比如识别出人员、车辆、动物等。它通过对大量带有标注的图像数据进行学习,提取出图像中的特征,进而判断图像中的物体类别。
    • 在电子商务中,用于商品图片的分类和识别。例如,识别服装图片中的款式、颜色等,帮助用户快速找到想要的商品。
  2. 人脸识别
    • 多层感知机可以对人脸图像进行特征提取和识别。在门禁系统中,通过对人脸图像的分析,判断是否为授权人员,从而决定是否开启门禁。
    • 在社交媒体应用中,用于自动识别照片中的人物,方便用户进行照片的分类和管理。

二、语音识别

  1. 语音指令识别:在智能语音助手(如 Siri、小爱同学等)中,多层感知机用于识别用户发出的语音指令。它将音频信号转换为特征向量,然后通过多层感知机对这些特征进行处理,判断用户的意图,例如是查询天气、播放音乐还是设置闹钟等。
  2. 语音转文字:在语音输入法和会议记录等场景中,多层感知机可以将输入的语音信号转换为文字内容。它通过对大量语音数据和对应的文字标注进行学习,不断优化模型,提高语音转文字的准确率。

三、自然语言处理

  1. 文本分类:在新闻媒体行业,多层感知机可以对新闻文章进行分类,如将新闻分为政治、经济、体育、娱乐等类别。它通过对新闻文本的词向量表示进行处理,学习文本中的语义特征,进而做出分类判断。
  2. 情感分析:在社交媒体监测和产品评论分析中,多层感知机可以分析用户发布的文本内容的情感倾向,判断是正面、负面还是中性。例如,分析消费者对某一产品的评论,帮助企业了解产品的口碑。

四、医疗领域

  1. 疾病诊断:在医学影像(如 X 光、CT、MRI 等)分析中,多层感知机可以辅助医生进行疾病诊断。例如,对肺部 CT 影像进行分析,判断是否存在肿瘤等病变。
  2. 药物研发:在药物研发过程中,多层感知机可以对化合物的结构和活性数据进行分析,预测化合物的药理活性,辅助筛选有潜力的药物分子。

3.代码实现

import torch
from torch import nn
from d2l import torch as d2l

#定义了批量大小为 256
batch_size = 256
#Fashion-MNIST数据集,该函数返回训练集和测试集的数据迭代器,Fashion-MNIST是一个包含10类时尚物品图像的数据集,常用于图像分类任务
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)
net = nn.Sequential(nn.Flatten(),  # 将输入数据展平为一维,长度为784
                    nn.Linear(784, 256), #将输入从784维映射到256维
                    nn.ReLU(), #激活函数,引入非线性特征
                    nn.Linear(256, 10)) #将输入从256维映射到10维,对应Fashion-MNIST的10个类别


def init_weights(m):
    if type(m) == nn.Linear:
        nn.init.normal_(m.weight, std=0.01) #初始化线性层的权重,它使用正态分布初始化权重,标准差为0.01

#将init_weights函数应用到网络中的每个线性层
net.apply(init_weights)
#计算每个图像的损失
loss = nn.CrossEntropyLoss(reduction='none')
#定义训练轮数和学习率
num_epochs, lr = 10, 0.1
#使用随机梯度下降(SGD)优化器
updater = torch.optim.SGD(net.parameters(), lr=lr)
#迭代地执行前向传播、计算损失、执行反向传播,并使用优化器更新模型参数
d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, updater)
d2l.plt.show()
#输出每个样本的预测结果
d2l.predict_ch3(net, test_iter)
d2l.plt.show()

结果

8ff443bd0f144808a7131d022c0e6271.png17950f741ca143edae4ded8bba87d657.png

 

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐