深度学习入门:神经元与感知机模型一次讲清
一句话结论:神经元与感知机模型是深度学习的最小计算单元,把输入特征加权求和再加偏置、经激活函数输出,从而把分类问题变成可微、可训练的参数优化问题。
神经元与感知机模型
是什么
神经元与感知机模型是深度学习网络的最小计算单元,它先对输入特征做加权求和,再加上偏置项,最后交给激活函数输出,数学形式为 。单个神经元本质上是一个带可学习参数的线性判别器。
解决什么问题
神经元与感知机模型解决了"如何让机器自动学出特征权重与分类阈值"的问题。人工规则方案需要逐个特征设定权重和切分阈值,样本分布一变就要重调;感知机把权重和偏置交给数据学习,只要样本线性可分,就能在有限次迭代内找到一组能正确划分样本的参数,从而把分类问题转化为参数优化问题。
为什么这样做
加权求和加激活函数的结构是刻意设计的,有三个原因。
其一,加权求和保证模型对参数可微,可以求导、可以用梯度下降优化;如果直接用阶跃函数判别,梯度处处为零或不可定义,参数根本无法更新。其二,偏置项让决策边界可以平移,否则所有分界线都必须过原点,表达能力被严重限制。其三,激活函数提供非线性,但单靠线性变换堆叠多少层都等价于一次线性变换——这正是单层感知机无法解决异或(XOR)问题的根本原因:异或的正负样本落在平面上时不能被任何一条直线分开。
因此现代深度学习的做法是:保留单个神经元的可微形式,靠"隐藏层 + 非线性激活"逐层组合出复杂决策边界。
怎么用
用 NumPy 实现一个可切换激活函数的神经元,并对比线性可分与线性不可分两类数据:
import numpy as np
def neuron(x, w, b, act=np.maximum): # act 默认 ReLU
return act(x @ w + b)
# 1) 线性可分:AND 逻辑,单个神经元就能学出来
X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]], dtype=float)
print(neuron(X, np.array([0.5, 0.5]), -0.75)) # [0. 0. 0. 0.5]
# 2) 线性不可分:XOR 必须加一层隐藏层
hidden = neuron(X, np.array([[1.0, 1.0], [1.0, 1.0]]), np.array([-0.5, -1.5]))
print(neuron(hidden, np.array([[1.0, -2.0]]), -0.5)) # 近似 [0. 1. 1. 0.]
要点:输入矩阵形状是 (样本数, 特征数),权重形状是 (特征数, 输出个数),输出形状是 (样本数, 输出个数);形状对不上通常说明权重矩阵写反了。
常见坑
- 现象:训练损失始终不下降。原因:用阶跃函数当激活函数,梯度恒为零。处理:换成 ReLU、Sigmoid 等可导函数。
- 现象:单层网络在异或数据上永远不收敛。原因:决策边界是直线,而异或线性不可分。处理:至少加一个隐藏层,并保证隐藏层之后有非线性激活。
- 现象:输入全为 0 时输出恒定。原因:漏掉偏置项 ,模型被强制过原点。处理:补上偏置并让它参与训练。
- 现象:矩阵乘法报维度错误。原因:权重写成了
(输出数, 特征数)。处理:按X @ W + b的规则核对三个张量的形状。 - 现象:ReLU 神经元"死亡",输出恒为 0。原因:学习率过大,负半轴权重再也回不来。处理:降低学习率或改用 LeakyReLU。
要点总结
- 神经元与感知机模型等于加权求和加偏置再加激活函数,是深度学习最小的可训练单元。
- 决策边界由权重和偏置共同决定,单个神经元只能给出线性边界。
- 偏置项不可省略,它决定决策边界能否平移。
- 激活函数提供非线性;缺少它,多层网络等价于一次线性变换。
- 异或问题是线性不可分的经典反例,必须靠隐藏层解决。
- 形状约束是
(样本数, 特征数) @ (特征数, 输出个数),维度对不上先查权重矩阵。
