构造感知机

本文深入浅出地介绍了神经网络的基本构建过程,从模拟神经元到感知机的实现,再到通过一个乐器分类的小例子,展示了如何训练神经网络以进行分类任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大江东去,浪淘尽,千古风流人物……

我不知道未来的黑洞会将我拽入何方,但是滚滚长江却毕竟向东流去,尽可能的去挖掘不同的东西,看看到底自己适合什么。2018年已经接近尾声了,有了清晰的目标就放手去干吧,别留遗憾。
今天记录一下构造神经网络的过程。

1.模拟一个神经元

首先我们所谓的神经网络全称是人工神经网络(ANN),区别于生物神经网络。
在这里插入图片描述
我们将输入当做树突,权重当做兴奋程度,将输入和权重做內积,即得到一个信号。
在这里插入图片描述
s=p1w1+p2w2+p3w3+......+pnwns=p_1w_1+p_2w_2+p_3w_3+......+p_nw_ns=p1w1+p2w2+p3w3+......+pnwn
光有信号还不行,我们需要得到一个结果,神经网络往往用于处理分类问题,故需要一个激励函数来讲信号作为输入,输出我们想看到的分类,如0or1.
在这里插入图片描述
常见的激励函数有:
在这里插入图片描述
这里我们模拟了一个神经元的功能,但是神经元本身的特性也需要考虑,故此时我们将内部强度加一个basis,即偏置,
在这里插入图片描述
s=p1w1+p2w2+p3w3+......+pnwn+bs=p_1w_1+p_2w_2+p_3w_3+......+p_nw_n+bs=p1w1+p2w2+p3w3+......+pnwn+b
这便是一个神经元功能的完整描述。

2.感知机

在这里插入图片描述
有句话广为流传:深度学习源于神经网络,神经网络源于感知机。感知机就是我们上面模拟的神经元,一回事。
网络接收若干个输入,并通过输入函数、传递函数给出网络的一个输出。在监督学习中,我们可以通过期望值不断修正权重,最终得到一个可用的权重并用训练好的感知机去预测。

3.一个小例子

光说不练假把式,通过一个特别简单的例子来说明道理。
我个人特别喜欢音乐,那么就来一个乐器分类的例子。现在有吉他和钢琴两种乐器,我们通过声音的两个特性音高和音调来区分乐器,通过表格设置特征值。

种类音调音高
钢琴1(柔和)1(高)
吉他-1(清脆)-1(低)

这里列举的几个特性可能不恰当,仅仅抛砖引玉,则
p1(音调)=−1或1p_1(音调)=-1或1p1()=11
p2(音高)=−1或1p_2(音高)=-1或1p2()=11
假设:w1=w2=1,b=0w_1=w_2=1,b=0w1=w2=1,b=0,将特征值与权重做內积,
钢琴:11+11+0=2
吉他:-1-1+(-1)*1+0=-2
我们定义1是钢琴,0是吉他,借用step函数作为激励函数,则
step(2)=1,step(−2)=0step(2)=1,step(-2)=0step(2)=1,step(2)=0,正是我们想要的结果。
这里我们预先设定好的权重和偏置,而感知机的训练过程正是学习合适的权重和偏置来得到合理的预测模型满足我们的要求。训练过程如下:

  • w(new)=w(old)+epw(new)=w(old)+epw(new)=w(old)+ep
  • b(new)=b(old)+eb(new)=b(old)+eb(new)=b(old)+e
    eee表示误差,e=t(期望输出)−a(实际输出)e=t(期望输出)-a(实际输出)e=t()a()
(1)

利用这个学习方法,我们先假设w1=1,w2=−1,b=0w_1=1,w_2=-1,b=0w1=1,w2=1,b=0
钢琴:s=p1w1+p2w2+b=0s=p_1w_1+p_2w_2+b=0s=p1w1+p2w2+b=0f=0,利用step公式f=0,利用step公式f=0,step
我们期望1结果却得到0显然不符,此时误差为:e=t−a=1−0=1e=t-a=1-0=1e=ta=10=1

(2)

带入学习模型,有:
w1new=w1old+ep=1+1∗1=2w_{1new}=w_{1old}+ep=1+1*1=2w1new=w1old+ep=1+11=2
w2new=w2old+ep=−1+1∗1=0w_{2new}=w_{2old}+ep=-1+1*1=0w2new=w2old+ep=1+11=0
bnew=bold+e=1b_{new}=b_{old}+e=1bnew=bold+e=1

(3)

使用新权值带入感知机模型,有:
net=p1w1+p2w2+b=1∗2+1∗0+1=3net=p_1w_1+p_2w_2+b=1*2+1*0+1=3net=p1w1+p2w2+b=12+10+1=3,f=1f=1f=1,达到要求

(4)

现在用新权值计算吉他:
net=p1w1+p2w2+b=−1∗2+(−1)∗0+1=−1net=p_1w_1+p_2w_2+b=-1*2+(-1)*0+1=-1net=p1w1+p2w2+b=12+(1)0+1=1,f=0f=0f=0,达到要求
两者都判断正确,训练结束,得到理想模型。

### 正确构造和预处理数据的方法及注意事项 #### 数据构造方法 在多层感知机(MLP)中,数据的构造需要遵循特定的格式。通常,输入数据应为二维数组,其中每一行代表一个样本,每一列代表一个特征。对于分类任务,目标变量可以是整数标签或独热编码向量[^1]。 ```python import numpy as np from sklearn.preprocessing import OneHotEncoder # 示例:构造输入数据和目标变量 X = np.array([[2.3, 3.4], [1.2, 5.6], [3.4, 2.1]]) # 输入数据 y = np.array([0, 1, 0]) # 目标变量 # 对目标变量进行独热编码 encoder = OneHotEncoder(sparse=False) y_one_hot = encoder.fit_transform(y.reshape(-1, 1)) ``` #### 数据预处理注意事项 为了确保 MLP 的训练效果最佳,应对数据进行适当的预处理。常见的预处理步骤包括标准化、归一化和处理缺失值。 - **标准化**:将数据转换为均值为零、标准差为一的分布。这有助于加速模型的收敛并提高性能[^3]。 ```python from sklearn.preprocessing import StandardScaler # 标准化输入数据 scaler = StandardScaler() X_scaled = scaler.fit_transform(X) ``` - **归一化**:将数据缩放到指定范围(如 [0, 1] 或 [-1, 1])。这对于某些激活函数(如 sigmoid 或 tanh)尤为重要[^2]。 ```python from sklearn.preprocessing import MinMaxScaler # 归一化输入数据到 [0, 1] min_max_scaler = MinMaxScaler() X_normalized = min_max_scaler.fit_transform(X) ``` - **处理缺失值**:通过填充均值、中位数或众数来处理缺失值,以避免对模型训练产生不良影响[^3]。 ```python from sklearn.impute import SimpleImputer # 使用均值填充缺失值 imputer = SimpleImputer(strategy='mean') X_imputed = imputer.fit_transform(X) ``` #### 数据分割 为了评估模型的性能,通常需要将数据集分为训练集、验证集和测试集。训练集用于模型训练,验证集用于超参数调优,测试集用于最终性能评估[^1]。 ```python from sklearn.model_selection import train_test_split # 将数据集分为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X_scaled, y_one_hot, test_size=0.2, random_state=42) ``` #### 批量大小和迭代次数 在训练过程中,批量大小和迭代次数的选择会影响模型的收敛速度和最终性能。较大的批量大小通常会导致更稳定的梯度估计,但可能需要更多的内存。较小的批量大小则可能导致训练不稳定,但可以更好地利用硬件资源[^3]。 ```python # 设置批量大小和迭代次数 batch_size = 32 epochs = 100 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

量子象限

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值