机器学习多层感知机

一个很有趣的个人博客,不信你来撩http://fangzengye.com

多层感知机

感知机

基本的处理单元

  • 一个感知机
    在这里插入图片描述
    该感知机的输出 y = w T x y=\textbf{w}^T\textbf{x} y=wTx
    w \textbf{w} w维度1x(d+1)
    x \textbf{x} x维度(d+1)x1
    该公式定义类一个空间超平面,可以将输入空间划分为两个部分。
    y = [ w 0 ⋯ w d ] [ x 0 ⋮ x d ] y= \begin{bmatrix} w_0&\cdots&w_d \end{bmatrix} \begin{bmatrix} x_0 \\ \vdots\\ x_d \end{bmatrix} y=[w0wd]x0xd
    这是一个感知机单元的输出
    假设有多个感知机单元的输出,那表达式会怎样呢?

  • K个并行的感知机
    在这里插入图片描述
    [ y 1 ⋮ y K ] = [ w 10 ⋯ w 1 d ⋮ ⋱ ⋮ w K 0 ⋯ w K d ] [ x 0 ⋮ x d ] \begin{bmatrix} y_1\\ \vdots\\ y_K \end{bmatrix} = \begin{bmatrix} w_{10}&\cdots&w_{1d}\\ \vdots&\ddots&\vdots\\ w_{K0}&\cdots&w_{Kd} \end{bmatrix} \begin{bmatrix} x_0 \\ \vdots\\ x_d \end{bmatrix} y1yK=w10wK0w1dwKdx0xd
    因此权重矩阵W每一行代表输入到某一个感知机单元的权重
    所以结论:

任何一个神经网络的输入在等式的最右侧,输出在等式的最左侧,权重在中间。

有时候感知机有阈值 θ \theta θ
定义 s ( ⋅ ) s(·) s()为阈值函数,则
s ( a ) = { 1 如 果 a > 0 0 否 则 s(a)=\left\{ \begin{aligned} 1& &{如果a>0}\\ 0& &{否则} \end{aligned} \right. s(a)={10a>0
a = y a=y a=y
即当输出 y > 0 y>0 y>0即判给1类
为了计算风险,需要将输出转化为后验概率,使用 S S S函数
o = w T x o=\textbf{w}^T\textbf{x} o=wTx

y = s i g m o i d ( o ) = 1 1 + e ( − o ) y=sigmoid(o)=\frac{1}{1+e^{(-o)}} y=sigmoid(o)=1+e(o)1

训练感知机

感知机定义了一个超平面,而神经网络感知机只不过是实现超平面的一种方法。

在线学习:逐个提供实例学习的方法

对于实例(x,r)误差表示:
E ( w ∣ x , r ) = 1 2 ( r − y ) 2 = 1 2 [ r − ( w T x ) ] 2 (1) E(w|x,r)=\frac{1}{2}(r-y)^2=\frac{1}{2}[r-(w^Tx)]^2 \tag{1} E(wx,r)=21(ry)2=21[r(wTx)]2(1)
r r r为真实值
y y y为输出值

若使用梯度下降法更新梯度,对w求导
∂ E ∂ w = Δ w = − η ( r − w T x ) x \frac{\partial E}{\partial w}=\Delta w=-\eta(r-w^Tx)x wE=Δw=η(rwTx)x
η \eta η:学习因子

权重更新公式
w = w − Δ w w=w-\Delta w w=wΔw

单个输出
y = s i g m o i d ( w T x ) y=sigmoid(w^Tx) y=sigmoid(wTx)
互熵
E ( w ∣ x , r ) = − r l o g y + ( 1 − r ) l o g ( 1 − y ) E(w|x,r)=-rlogy+(1-r)log(1-y) E(wx,r)=rlogy+(1r)log(1y)
多个输出
y i = e w i T x ∑ k e w k T x y_i= \frac {e^{w_i^Tx}}{\sum \limits_ke^{w_k^Tx}} yi=kewkTxewiTx

互熵
E ( w i ∣ x , r ) = − ∑ i r i l o g y i E(w_i|x,r)=-\sum\limits_ir_ilogy_i E(wix,r)=irilogyi
调整参数的伟大公式:

  • 更新=学习因子*(期望输出-实际输出)*输入

也就是说,更新的幅度正比于误差error,更新量还依赖于输入,对于学习因子过大,则更新过分依赖当前实例,就像系统只有短期记忆,如果因子太小,则收敛很慢。

学习布尔函数

学习AND布尔函数,一个感知机就可以解决,但是解决异或布尔函数,因此需要多层感知机

异或函数

x1x2r
0 0 0
0 1 1
1 0 1
1 1 0

多层感知机

在这里插入图片描述
具有单层权重的感知机只能输入线性函数。
对于输入和输出加入层称为中间层或隐含层,即多层感知机。
Z = w x (2) Z=wx\tag{2} Z=wx(2)
y = v Z (3) y=vZ\tag{3} y=vZ(3)

向后传播算法(BP)

训练多层感知机和训练一个感知机一样。
在这里插入图片描述
由公式1,3对权重v求偏导
∂ E ∂ v i h = ∂ E ∂ y i ∂ y i v i h = − ( r i − y i ) Z h \frac{\partial E}{\partial v_{ih}}=\frac{\partial E}{\partial y_i}\frac{\partial y_i}{v_{ih}}=-(r_i-y_i)Z_h vihE=yiEvihyi=(riyi)Zh

  • 假设去掉第一层,那么Z就为“输入层”,可以类比单层感知机公式

由误差公式1,公式2,3对 w h j w_{hj} whj求偏导( h h h第几个输入, j j j第几个输出)

∂ E ∂ w h j = ∂ E ∂ y i ∂ y i ∂ Z h ∂ Z h ∂ w h j = − ( r i − y i ) v i h x j \frac{\partial E}{\partial w_{hj}}=\frac{\partial E}{\partial y_i}\frac{\partial y_i}{\partial Z_h}\frac{\partial Z_h}{\partial w_{hj}}=-(r_i-y_i)v_{ih}x_j whjE=yiEZhyiwhjZh=(riyi)vihxj
BP网络伪代码

在这里插入图片描述

非线性回归

两类判别式

多类判别式

多层隐含层

训练过程

改善收敛性

动量

自适应学习率

过分训练

构造网络

线索

 

posted @ 2020-04-01 14:40  开源的Boy  阅读(179)  评论(0)    收藏  举报