DL01-6: 单层神经网络

本主题内容包含:

  1. 理解单层多感知器神经网络(不含隐藏层)。
  2. 实现单层神经网络分类(矩阵)。

多感知器实际就是单个感知器的集合,训练时对一个样本,所有感知器都同时得到训练(因为同时更新所有感知器的权重)。

注意:本文显式使用了标量乘积\ast与向量内积\bullet

1、分类特征表示

   一般的分类是简单的二类分类,要么是A类与是B类,可以用标量0与1表示,是A类就是0,是B类就是1。
   分类也可以使用向量表示\begin{bmatrix}1\\0\end{bmatrix}\begin{bmatrix}0\\1\end{bmatrix},是A类就是\begin{bmatrix}1\\0\end{bmatrix},是B类就是\begin{bmatrix}0\\1\end{bmatrix}
  向量的分类表示有多个好处:
    ( 1 ) 可以扩展为n类样本分类
    ( 2 ) 分类方式更加简单。比如:第i类样本的样本期望向量可以表示为\begin{bmatrix}0\\\vdots\\1_i\\\vdots\\0\end{bmatrix}。向量的第n个特征数据对应着对应分类的特征值,只要某位置上特征值最大\begin{bmatrix}0.001\\\vdots\\0.812_i\\\vdots\\0\end{bmatrix}(第i位置上的值0.812最大),我们就可以认为该输出的向量表示样本是对应位置的表示的分类(属于第i类)。

神经网络的输出向量的每个特征值对应一个感知器。下面我们使用多个感知器构成单层神经网络。

2、单层神经网络表示

单层多感知器神经网络图示如下:>
单层多感知器神经网络

  其中数据表示如下:

  1. 输入数据向量:\overrightarrow{X}=\begin{bmatrix}x_0&x_1&\dots&x_n\end{bmatrix}\qquad\qquad (矩阵表示为:X
  1. 输出数据向量:\overrightarrow{Y}=\begin{bmatrix}y_0&y_1&\dots&y_m\end{bmatrix}\qquad\qquad (矩阵表示为:Y
  1. 权重矩阵:W=\begin{bmatrix} {\omega_{00}}&{\omega_{01}}&{\dots}&{\omega_{0n}}\\ {\omega_{10}} &{\omega_{11}}&{\dots}&{\omega_{1n}}\\ {\dots}&{\dots}&{\dots}&{\dots}\\ {\omega_{m0}}&{\omega_{m1}}&{\dots}&{\omega_{mn}} \end{bmatrix}\qquad\qquad
    n是输入特征数据长度,m数输出特征数据长度)
    (权重的每一行对应着一个感知器的权重,m行就意味着m个感知器)

3、单层神经网络训练算法

  单层神经网络训练依据是基于如下目标:
  就是找到一组感知器的权重,使得这组感知器的输出Y与期望输出\bar{Y}之间的误差最小。

第一步:初始化一个随机权重矩阵(用来训练);
第二步:输入特征数据X计算每个感知器(m个感知器)的输出y_i(i=1,2,\dots,m),每个感知器的权重对应权重矩阵W中的一行,多个感知的输出就是输出向量Y
第三步:计算感知器输出向量Y与样本期望输出\bar{Y}之间的误差。
第四步:根据计算的误差,计算权重矩阵的更新梯度。
第五步:用更新梯度,更新权重矩阵。
第六步:然后从第二步反复执行,直到训练结束(训练次数根据经验自由确定)

4、单层神经网络中的计算公式表示

在上面描述的训练过程中,有两个主要的计算公式

  1. 感知器输出计算。
  2. 权重的更新计算(核心是计算更新梯度)。

其中权重梯度的计算有两个依据:

  1. 误差的度量标准:损失函数的定义;
  2. 误差最小:损失函数极小值计算。

根据这两个依据,我们可以列出单层神经网络的计算公式如下:

单层多感知器的计算输出公式:

Y^T=W\bullet X^T+W_b
X\ \:输入特征数据,使用行向量表示.
W_b:表示加权求和的偏置项。

如果考虑激活函数,则计算输出公式为:

Y^T=f_{activity}(W\bullet{X^T}+W_b)

单层多感知器的权重计算公式:

W_{new}=W_{old}-\eta\ast\nabla_{W}
w_i^{new}=w_i^{old}-\eta\ast\nabla_{w_i}

\ \ \ \ \ i:表示第i个感知器
\ \ \ \ \ \eta:表示学习率,用来控制训练速度。
\nabla_{w_i}:表示更新梯度(因为误差最小,是梯度下降,所以梯度更新是减去(-)梯度),梯度使用损失函数的导数,表示如下:
\nabla_{w_i}=\frac{\partial{E{(w_i)}}}{\partial{w_i}}


使用链式偏导数公式,损失函数E(W)可以表示为输出Y的函数,则可以把梯度展开:
\nabla_{w_i}=\frac{\partial{E{(y_i)}}}{\partial{y_i}}\ast \frac{\partial{y_i}}{\partial{w_i}}


上述公式中y_i是激活函数的输出,可以表示为y_i=f_{activity}(a_i),其中a_i=w_i\bullet X^T+w_{ib},则上述公式可以继续展开如下:
\nabla_{w_i}=\frac{\partial{E{(y_i)}}}{\partial{y_i}}\ast \frac{\partial{f_{activity}(a_i)}}{\partial{a_i}}\ast \frac{\partial{w_i\bullet X^T}}{\partial{w_i}}
上述公式中的计算项说明:
\frac{\partial{E{(y_i)}}}{\partial{y_i}}:就是损失函数的导数;

\frac{\partial{f_{activity}(a_i)}}{\partial{a_i}}:激活函数的导数;

\frac{\partial{w_i\bullet X^T}}{\partial{w_i}}:加权求和的导数;


如果损失函数采用误差平方和函数\frac{1}{2}\sum\limits_{k=1}^{N}(y_{ik}-\overline{y}_{ik})^2(N是样本个数),其导数为:\sum\limits_{k=1}^{N}(y_{ik}-\overline{y}_{ik}),如果采用随机梯度,则取当前样本,而不是所有样本,则可以表示如下:(y_{ik}-\overline{y}_{ik})

若果激活函数采用恒等函数,其导数为:f(x)=1
加权求和的导数为:X

则梯度可以表示为:
\nabla_{w_i}=\sum\limits_{k=1}^{N}(y_{ik}-\overline{y}_{ik})\ast X
或者(随机误差损失函数):
\nabla_{w_i}=(y_{ik}-\overline{y}_{ik})\ast X
可以根据上面的推导过程很容易得到偏置项梯度为
\nabla_{w_{ib}}=\sum\limits_{k=1}^{N}(y_{ik}-\overline{y}_{ik})
或者
\nabla_{w_{ib}}=(y_{ik}-\overline{y}_{ik})
今后不采用其他激活函数与损失函数,这个公式尽管复杂点,但计算原理都是一样。


更进一步,我们可以对\nabla_{w_i}=\frac{\partial{E{(w_i)}}}{\partial{w_i}}展开的公式进行分析,把与输入特征数据无关的部分剥离出来:
\nabla_{w_i}=(\frac{\partial{E{(y_i)}}}{\partial{y_i}}\ast \frac{\partial{f_{activity}(a_i)}}{\partial{a_i}})\ast \frac{\partial{w_i\bullet X^T}}{\partial{w_i}}
可以单独把上式括号中的项记为\delta,称为误差项:
\delta_i=\frac{\partial{E{(y_i)}}}{\partial{y_i}}\ast \frac{\partial{f_{activity}(a_i)}}{\partial{a_i}}
把误差项剥离出来,可以在今后多层神经网络中,对误差项进行传递,计算每一层的权重更新梯度。

5、向量求导的理解

  因为标量与向量的求导是有区别的,但是当向量求导中的运算与标量一样的时候,向量求导与标量求导是没有差异的(传统标量的运算公式与规律大部分都可以平行移植到向量的运算中)。
  但是内积的求导是区别于传统的标量运算的,是向量运算中独有的运算定义,下面我们从细节上推导下面公式:

\frac{\partial{w_i\bullet X^T}}{\partial{w_i}}=X


标量对向量求导公式:
\dfrac{\partial{y_i}}{\partial{w_i}}= \begin{bmatrix} \dfrac{\partial{y_i}}{\partial{w_{i0}}}&\dfrac{\partial{y_i}}{\partial{w_{i1}}}\cdots&\dfrac{\partial{y_i}}{\partial{w_{in}}}\\ \end{bmatrix}= \begin{bmatrix} x_0&x_1&\dots&x_n\\ \end{bmatrix}
其中:y_i=w_i\bullet X^T


6、单层多感知器神经网络的向量表示

   可以把上面多个感知器的梯度使用向量公式表达:

W_{new}=W_{old}-\eta\ast\vec{\delta}\bullet X
其中:\vec{\delta}=\begin{bmatrix}{\delta_0\\\delta_1\\\vdots\\\delta_m}\end{bmatrix}


后面我们使用向量与tensorflow两种方式来实现单层神经网络。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,475评论 4 372
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,744评论 2 307
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 112,101评论 0 254
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,732评论 0 221
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,141评论 3 297
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,049评论 1 226
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,188评论 2 320
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,965评论 0 213
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,716评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,867评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,341评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,663评论 3 263
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,376评论 3 244
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,200评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,990评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,179评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,979评论 2 279

推荐阅读更多精彩内容