偏导数与梯度
对于有n个变量x1,x2,…,xn的函数f,定义偏导数
∂xi∂f=h→0limhf(x1,…,xi+h,…,xn)−f(x)
将其组成一个行向量
▽xf=grad f=[∂x1∂f,∂x2∂f,…,∂xn∂f]
考虑两个变量 x1,x2 的函数 f:R2→R。此外,x1(t) 和 x2(t) 本身就是 t 的函数。为了计算 f 相对于 t 的梯度,我们需要对多元函数使用链式法则:
dtdf=[∂x1∂f∂x2∂f][∂t∂x1(t)∂t∂x2(t)]=∂x1∂f∂t∂x1+∂x2∂f∂t∂x2
如果 f(x1,x2) 是 x1 和 x2 的函数,其中 x1(s,t) 和 x2(s,t) 是两个变量 s 和 t 的函数,则用链式法则求得偏导数为:
∂s∂f=∂x1∂f∂s∂x1+∂x2∂f∂s∂x2
∂t∂f=∂x1∂f∂t∂x1+∂x2∂f∂t∂x2
梯度由矩阵相乘得到
d(s,t)df=∂x∂f∂(s,t)∂x=∂x∂f[∂x1∂f∂x2∂f]∂(s,t)∂x[∂s∂x1∂s∂x2∂t∂x1∂t∂x2]
向量值函数的梯度
函数 f:Rn→Rm 相对于 x∈Rn 的梯度:
dxdf(x)=[∂x1∂f(x)⋯∂xn∂f(x)]=∂x1∂f1(x)⋮∂x1∂fm(x)⋯⋯∂xn∂f1(x)⋮∂xn∂fm(x)∈Rm×n.
计算梯度的有用恒等式
在以下内容中,我们列出了一些在机器学习上下文中经常需要的梯度(Petersen and Pedersen, 2012)。这里,我们使用 tr(⋅) 表示迹,det(⋅) 表示行列式和 f(X)−1 表示 f(X) 的逆,假设它存在。
∂X∂f(X)⊤=(∂X∂f(X))⊤∂X∂tr(f(X))=tr(∂X∂f(X))∂X∂det(f(X))=det(f(X))tr(f(X)−1∂X∂f(X))∂X∂f(X)−1=−f(X)−1∂X∂f(X)f(X)−1∂X∂a⊤X−1b=−(X−1)⊤ab⊤(X−1)⊤∂x∂x⊤a=a⊤∂x∂a⊤x=a⊤∂X∂a⊤Xb=ab⊤∂x∂x⊤Bx=x⊤(B+B⊤)∂s∂(x−As)⊤W(x−As)=−2(x−As)⊤WAfor symmetric W
神经元模型
神经元模型的三种基本元素
- 突触或连接链集:一组突触(或称连接链路),每个突触都具有其特征性的权重或强度。具体而言,在连接到神经元k的突触j输入端,信号xj会被突触权重wkj所加权。需要特别注意突触权重wkj下标标记的规范:其中第一个下标k表示所关联的神经元,第二个下标j表示该权重对应的突触输入端。与生物大脑的突触权重不同,人工神经元的突触权重取值范围可以包含正值和负值。这种数学特性使得人工神经网络具有更灵活的信号处理能力,权重值的符号决定了输入信号的增强或抑制效应,而绝对值则表征了信号传递的强度。该设计为神经网络实现复杂的非线性映射提供了基础数学框架。
- 加法器
- 激活函数:可让神经网络学习特征与标签之间的非线性(复杂)关系。常用作激活函数的三个数学函数是 Sigmoid 函数、tanh 函数和 ReLU 函数。

如图所示的神经元模型还包含一个外部施加的偏置,记为bk。该偏置bk的作用是依据其正负性,分别增强或削弱激活函数的净输入。
用数学术语来表述,如图所示的神经元k可通过以下两个方程描述:
uk=j=1∑mwkjxj
yk=φ(uk+bk)
其中x1,x2,...,xm为输入信号;wk1,wk2,...,wkm为神经元k对应的突触权重;uk(未在图中标注)是由输入信号产生的线性组合器输出;bk为偏置;φ(⋅)为激活函数;yk为神经元输出信号。偏置bk的作用在于对如图模型中线性组合器的输出uk施加仿射变换,即:
vk=uk+bk
特别地,偏置bk的正负性会改变神经元k的诱导局部场(或称激活电位)vk与线性组合器输出uk之间的关系。此后,这两个术语将互换使用。值得注意的是,此仿射变换导致vk相对于uk的曲线不再通过原点。
偏置bk是神经元k的外部参数。如式(2)所示,其存在可通过数学形式体现。等价地,可将式(1)至式(3)合并为:
vk=j=0∑mwkjxj
(注:此处x0=1,wk0=bk,通过引入虚拟输入x0,将偏置项整合至权重求和表达式中。)
Rosenblatt感知机
感知机是神经网络的最简形式,用于对线性可分模式(即分布于超平面两侧的模式)进行分类。其本质由一个具有可调节突触权重和偏置的单一神经元构成。Rosenblatt证明:若用于训练感知机的模式(向量)来自两个线性可分类别,则感知机算法会收敛,并以超平面形式将决策面定位在两类之间。此算法的收敛性证明被称为感知机收敛定理。

用Python实现如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| def Preceptron(X, y, learning_rate=0.01, n_iterations=1000, Early_termination = True): n_samples, n_features = X.shape weights = np.zeros(n_features) bias = 0
for _ in range(n_iterations): for idx, x_i in enumerate(X): linear_output = np.dot(x_i, weights) + bias y_predicted = np.where(linear_output >= 0, 1, 0)
update = learning_rate * (y[idx] - y_predicted) weights += update * x_i bias += update
if np.all((np.dot(X, weights) + bias >= 0) == y) and Early_termination: break
return weights, bias
|
感知机收敛定理
现可表述感知机的固定增量收敛定理如下(Rosenblatt, 1962):
设训练向量子集H1与H2是线性可分的,且输入到感知机的样本均源自这两个子集。则感知机在有限次迭代后收敛,即存在某次迭代no使得:
w(no)=w(no+1)=w(no+2)=⋯
构成解向量,且满足no≤nmax。
感知机收敛定理证明提示
感知机收敛定理的证明核心在于说明,如果数据线性可分,算法在每次错误调整后都会朝着一个“理想方向”靠近,但这种靠近的过程不能无限持续,从而导出更新次数的有限性。具体来说,首先假设存在一个能将所有数据正确分类且带有最小间隔的理想超平面。每次误分类时,权重会根据误分类点更新,这使得权重向量与理想方向的对齐程度(内积)至少增加一个固定值。另一方面,每次更新后权重的长度增长被数据点的最大长度所限制。将这两个趋势结合起来,对齐程度的线性增长最终会超过长度增长的平方根速度,从而迫使更新次数必须有限,否则会导致矛盾。因此算法必然在有限步内停止更新,找到正确分类的超平面。可以使用柯西-施瓦茨不等式(Cauchy–Schwarz inequality)进行证明。
多层感知机
如下图展示了一个具有两个隐藏层和一个输出层的多层感知器结构图。

如下图所示为多层感知机的一部分,该网络识别两种信号:
- 函数信号(输入信号):函数信号是指从网络输入端传入的输入信号(激励),通过前向传播(逐神经元传递)穿过网络,最终作为输出信号从网络输出端产生。
- 误差信号:误差信号始于网络的输出层神经元,通过反向传播(逐层传递)穿过网络。

输出神经元构成了网络的输出层。其余神经元则组成了网络的隐藏层。因此,隐藏单元并不属于网络的输入或输出部分——这正是其被称为"隐藏"的缘由。第一隐藏层接收由感知单元(源节点)构成的输入层所传递的信号;该隐藏层的输出结果继而传递至下一隐藏层;网络其余层级均依此类推进行信号传输。