零基础入门深度学习(3) - 神经网络和反向传播算法

零基础入门深度学习(3) - 神经网络和反向传播算法

1 前言 什么是神经网络和反向传播算法?

单独的感知器或者线性单元这样的单元相互连接在一起形成神经网络。即按照一定规则连接起来的多个神经元。

反向传播算法(Back Propagation):通过了解神经网络每个节点误差项的计算方法和权重更新方法(后面说),可以知道计算一个节点的误差需要先计算和它相连的下一层节点的误差项。所以误差项计算从输出层开始反向推算,顾名思义啦。

2 咱们接着展开说说——神经网络

2.1 相关规则

  • ①神经元,最左侧为输入层,最右侧为输出层,中间为隐藏层(对外部不可见)
    ②只有相邻层之间神经元才会有连接
    ③N层和N-1层的所有神经元都连接,叫做全连接神经网络(Full connected)
    ④每个connection都有一个weight(权值)
    ⑤卷积神经网络(CNN)、循环神经网络(RNN)都具有不同的连接规则

连接规则不同,网络类型不同

神经元

2.2 输出~

输入向量x到输出向量y的函数: y = f n ( x ) y = f_n(x) y=fn(x)
n = network
想计算输出,就得有输入吧。第一步就是把向量 x x x中的每个元素 x i x_i xi赋给输入层的神经元,然后根据公式 y = s i g m o i d ( w T . x ) y = sigmoid(w^T.x) y=sigmoid(wT.x)来进行改成神经元的值的计算,一直直直直…到都计算完,输出 y i y_i yi连接到一起就成了向量 y y y
神经元输出
上图即为举例说明怎么求神经元的输出(自行李姐一下~)

2.3 矩阵表示~

2.3.1 隐藏层的矩阵表示

利用上图进行举例
先排列四个节点计算
a 4 = s i g m o i d ( w 4 1 x 1 + w 4 2 x 2 + w 4 3 x 3 + w 4 b ) a_4 = sigmoid(w_41x_1 + w_42x_2 + w_43x_3 + w_4b) a4=sigmoid(w41x1+w42x2+w43x3+w4b)
a 5 = s i g m o i d ( w 5 1 x 1 + w 5 2 x 2 + w 5 3 x 3 + w 5 b ) a_5 = sigmoid(w_51x_1 + w_52x_2 + w_53x_3 + w_5b) a5=sigmoid(w51x1+w52x2+w53x3+w5b)
a 6 = s i g m o i d ( w 6 1 x 1 + w 6 2 x 2 + w 6 3 x 3 + w 6 b ) a_6 = sigmoid(w_61x_1 + w_62x_2 + w_63x_3 + w_6b) a6=sigmoid(w61x1+w62x2+w63x3+w6b)
a 7 = s i g m o i d ( w 7 1 x 1 + w 7 2 x 2 + w 7 3 x 3 + w 7 b ) a_7 = sigmoid(w_71x_1 + w_72x_2 + w_73x_3 + w_7b) a7=sigmoid(w71x1+w72x2+w73x3+w7b)
随后定义输入向量 x x x和输出向量 y y y的权重 w j w_j wj
w 4 = [ w 4 1 , w 4 2 , w 4 3 , w 4 4 ] w_4 = [w_41,w_42,w_43,w_44] w4=[w41,w42,w43,w44]
得到 a 4 = f ( w 4 . x ) a_4 = f(w_4.x) a4=f(w4.x)
并且写入一个矩阵中,就变成矩阵了(好像白说)
矩阵
代入前面一组式子得: a = f ( W . x ) a = f(W.x) a=f(W.x)

  • 如下图

复杂例子

计算结果

3 想知道训练方法吗?——反向传播算法(Back Propagation)

3.1 小概念

超参数:一个神经网络的连接方式、网络层数和每层的节点数等参数,并不是学习出来的,而是人为设置的参数,这些参数即为~

3.2 算法介绍 δ

通过上面的简述,我相信大家已经简单知道了反向传播算法是怎么个事,下面详细叭叭一会。

  • 误差项的计算:
    1.输出层节点: δ i = y i ( 1 − y i ) ( t i − y i ) δ_i = y_i(1 - y_i)(t_i - y_i) δi=yi(1yi)(tiyi)
    δ即为误差项, y i y_i yi是输出, t i t_i ti则是i的label
    2.隐藏层节点: δ i = a i ( 1 − a i ) ∑ k ∈ o u t p u t s ∗ w k i δ k δ_i = a_i(1 - a_i)∑_k∈outputs * w_kiδ_k δi=ai(1ai)koutputswkiδk
    a i a_i ai是输出, w k i w_ki wki为权重, δ k δ_k δk是下一层节点k的误差项
  • 更新权值: w j i < − w j i + η δ j x j i w_ji <- w_ji + ηδ_jx_ji wji<wji+ηδjxji
    • $w_ji是i到j权重,η为学习速率,其余下标同理

3.3 推导??yep! but…

  • 先确定神经网络的目标函数,然后用随机梯度下降优化算法去求目标函数最小值时的参数值。(This is 通用套路)(书上说的)

  • 取网络所有输出层节点的误差平方和作为目标函数: E d ≡ 1 / 2 ∗ ∑ i ∈ o u t p u t s ∗ ( t i − y i ) 2 E_d ≡ 1/2 * ∑_i∈outputs * (t_i - y_i)^2 Ed1/2ioutputs(tiyi)2 E d E_d Ed是样本d的误差

  • 随机梯度下降算法对目标函数进行优化: w j i < − w j i − η ∂ E d / ∂ w j i w_ji <- w_ji - η∂E_d/∂w_ji wji<wjiηEd/wji

  • 求出误差 对于每个权重 的偏导数(也就是梯度),设 n e t j net_j netj是节点j的加权输入,即 n e t j = w j . x i net_j = w_j.x_i netj=wj.xi

  • E d E_d Ed is n e t j net_j netj 's function. And n e t j net_j netj is w j i w_ji wji 's function.
    根据链式求导法则得到:
    ∂ d / ∂ w j i = ∂ E d / ∂ n e t j ∗ x j i ∂d/∂w_ji = ∂E_d/∂net_j * x_ji d/wji=Ed/netjxji

3.3.1 输出层权值训练

w j i < − w j i − η δ j x j i w_ji <- w_ji - ηδ_jx_ji wji<wjiηδjxji

3.3.2 隐藏层权值训练

δ j = a i ( 1 − a i ) ∑ k ∈ D o w n s t r e a m ( j ) δ k w k j δ_j = a_i(1 - a_i)∑_k∈Downstream(j)δ_kw_kj δj=ai(1ai)kDownstream(j)δkwkj

代入3.3中式子即可
ps:这都是啥啊

问号

4 参考链接

https://www.zybuluo.com/hanbingtao/note/476663

5 补充

5.1 实战——手写数字识别

使用MNIST数据集,其具有大约6w个手写字母样本。

超参数

如何确定超参数呢?首先,确定网络layer和每层的节点数;其次,这个确定方法最有效的还是去尝试,对,没有什么理论化的方法哈哈哈。(纯手艺人)
输入层和输出层节点是确定的,但是隐藏层的节点不好确定,可以参考下面几个经验公式:

经验公式

模型训练和评估

错误率 = 错误预测样本数/总样本数

5.2 向量化编程

告别面向对象,迈向向量化!
底层算法库(甚至GPU)会对向量运算优化,提升效率。 (参考下图)
向量化编程

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值