感知机
本文是 B 站大神李沐的课程笔记。课程链接:多层感知机
感知机原理
感知机其实是一个很简单的线性模型,即给定输入 x \boldsymbol{x} x、权重 w \boldsymbol{w} w 以及偏差 b b b。则感知机的输出为:
out = σ ( ⟨ w , x ⟩ + b ) \text{out}=\sigma(\langle\boldsymbol{w},\ \boldsymbol{x}\rangle+b) out=σ(⟨w, x⟩+b)
其中 σ \sigma σ 函数为:
σ ( x ) = { 1 if x > 0 − 1 otherwise \sigma(x)= \left\{ \begin{array}{rcl} 1 & &\text{if}\ x>0 \\ -1& &\text{otherwise} \end{array} \right. σ(x)={
1−1if x>0otherwise
这实际上是一个二分类问题。
感知机训练步骤
initialize:w=0, b=0
repeat:
# 这里的 y 既是标签(目标)即 -1或1
if y * [<w, x> + b] <= 0: # 如果目标和感知机的输出异号,即分类不正确
w = w + y * x and b = b + y # 更新权重和偏差
end if
until 分类正确
这种算法等价于使用 batch_size=1
的梯度下降。其损失函数为:
f ( y , x , w ) = max ( 0 , − y ∗ ⟨ w , x ⟩ ) f(y,\boldsymbol{x},\boldsymbol{w})=\max(0,\ -y*\langle\boldsymbol{w}, \boldsymbol{x}\rangle) f(y,x,w)=max(0, −y∗⟨w,x⟩)
如果分类正确,则 y ∗ ⟨ w , x ⟩ > 0 y*\langle\boldsymbol{w}, \boldsymbol{x}\rangle>0 y∗⟨w,x⟩>0 ,前面加个负号使其小于 0 0 0 ,则损失函数的值为 0 0 0 ,梯度为 0 0 0 停止更新。否则,继续更新梯度权重。
这样的感知机只能进行线性的分类。
感知机的问题
感知机只能产生线性的分割面,无法解决 XOR 问题。假设我们有如下图所示的一个分类:
当 x , y x,\ y x, y 均为正值或负值时,其输出红色类;当 x x x 为正, y y