神经网络基础--反向传播与梯度下降--word2vec 词向量神经网络

这里写图片描述

一、概述神经网络

1.1 项目背景:个性化推荐意义

注册商标问题,papi酱 网名被注册
初始词向量

项目环境:
Python和Tensorflow
python: pip install tensorflow
Anaconda: conda install tensorflow
1.2 神经网络基础知识精讲

基础知识

  • 是一个黑箱算法,可解释性不强
    hidden layer 隐藏层,不可见,数值不是训练前可以知道的
    inputlayer 输入层:都是实数
  • 输入–>函数:线性函数(可以嵌套)但是还是线性函数,
    所以引用非线性函数(activation function)增强神经网络表达能力
    激活函数不可导的梯度函数,在求极值的时候,无法使用梯度下降法(求导数来求极值)
  • 神经网络表达能力和可解释性:
    足够的深度和宽度可以拟合任何一个复杂的函数(神经网络 manifold 理论),反之则拟合不足
    若宽度不足,深度很深也不行

反向传播与梯度下降法

  • loss 损失函数
    机器学习/数据挖掘模型 的目的,拟合一个函数,通过构造损失函数(loss),希望损失尽可能小,找一个函数使得loss尽可能小
    用导数求极小值,求导就叫做反向传播
  • 梯度问题
    • 导数链式法则
      若导数(变化率)小,经过很多层网络求导,他们的积接近于零,–>梯度消失
      若导数(变化率)大,经过很多层网络求导,他们的积接近无限大,–>梯度爆炸
    • 激活函数导数
    • 梯度下降方法:
      在神经网络中,参数初始值的选取,是优化的重要参数
      随机选取n个初始值,进行n次迭代
    • 梯度下降(Gradient Descent),步长抖动(步长不能太大,太小收敛太慢)
    • 解决梯度的方法:
      1–Lstm(long short-term memory)长短期记忆,用来解决RNN模型梯度问题
      (recursive/recurrent neural network 递归/周期神经网络,早期的记忆也会成为输入)
      2–选择特殊的激活函数ReLU(修正线性单元)
      Batch size 训练样本大小
      迭代算法对每一批样本,只走一步
      Batch size太小抖动大,太大则训练不明显,收敛满,要适当的小
1.3 word2vec 词向量原理
  • 对词进行编码及评价效果–连续性
    用夹角的余弦值表示词意思之间的距离,余弦值越大,两个词之间的意思越接近
  • 传统方法:利用term-doc matrix(词-文档矩阵)对词进行编码
    只能表示词出现的频次,词与词之间的距离无法体现
onehot 编码优缺点,以及限制
纬度高,新词没有对应的编码
因为onehot编码很多位是0,最终神经网络计算量不大
可以只考虑高频词,从而避免过分膨胀
word2vec优点
1 分布假说(只考虑近距离的词,语境/上下文)
2 在小范围内,可以不考虑字的顺序
3 试验表明,考虑太多细节(比如语法)效果不一定更好
word2vec 神经网络模型
cbow方法的网络模型
cbow(continuous bag of words l连续词袋)
与BoW一样,抛弃了词序信息,然后窗口在语料上滑动,成就了连续词袋
输入上下文—> 输出中心词
skip-gram 方法的网络模型
1 三层神经网络
2 中间层(第二层)没有激活函数(sigmoid)。避免语义过度抽象
3 输出层(第三层)又激活函数softmax
采样过程,忽略一部分的词
输入中心词—> 输出上下文
从 onehot 编码–>自编码
word2vec 代码剖析 skip-gram
word2vec 之cbow
word2vec 运行结果分析
模型训练标准
模型测试标准
1.4 协同过滤:item embedding
采用embedding技术实现推荐系统时效性–新闻阅读和个性化推荐
1 关键词 textrank 根据两个词互相投票来确定一个词的重要性 pagerank’财经’,‘发展’,‘银行’/3 来计算平均向量
2 投票用词向量夹角余弦来计算
3 textrank
优点:不管一片文章中两个词的相隔距离,根据相应的词向量,计算相似度
4 归类,计算平均向量 与各个类别向量的距离 可以对文章进行归类
1.5 应用方向
  • 初始推荐系统

    • 推荐系统知识
      新浪网:猜你喜欢
      网易: 今日点击
      新闻T字形标签提取
      新闻推荐
  • 总结和拓展
    总结
    自编码网络

二、反向传播

2.1 DNN反向传播算法

在这里插入图片描述

2.2 CNN反向传播算法

对比深度神经网络反向传播算法,卷积神经网络反向传播算法需要解决以下几个问题。
在这里插入图片描述
由于卷积层可以有多个卷积核,各个卷积核之间的处理方式是完全相同的,为了简化算法公式的复杂度,下面推导时只针对卷积层中若干卷积核中的一个。

  1. 池化层的反向传播
    池化层没有激活函数可以直接看成用线性激活函数,即 σ ( z ) = z σ(z)=z σ(z)=z,所以 σ ′ ( z ) = 1 σ^′(z)=1 σ(z)=1。接下来看看池化层如何递推 δ l δ^l δl

    在前向传播时,我们一般使用 max或 average对输入进行池化,而且池化区域大小已知。反向传播就是要从缩小后的误差 δ l + 1 δ^{l+1} δl+1,还原池化前较大区域对应的误差 δ l δ^l δl。根据(2)式子,在DNN中 w l + 1 w^{l+1} wl+1是已知的,所以我们可以直接通过矩阵乘法将 l + 1 l+1 l+1 层的误差映射回 l l l 层的误差,但对于池化层,要求 ( w l + 1 ) T δ l + 1 (w^{l+1})^T \delta^{l+1} (wl+1)Tδl+1 就需要一些特殊的操作了。

用一个例子可以很清楚的解释这一过程:假设现在我们是步长为1的 2×2 池化,4×4大小的区域经过池化后变为2×2。如果 δ l δ^l δl 的第 k个子矩阵为: δ k l = [ 2 8 4 6 ] (5) \delta_k^l = \begin{bmatrix} 2 &8 \\ 4 & 6 \end{bmatrix} \tag5 δkl=[2486](5)

首先我们对 δ k l \delta_k^l δkl 进行还原。 如果是max pooling,我们只需要记录前向传播中最大值的位置,然后将误差放回去即可。如果最大值位置分别为 2×2 的左上,右下,右上,左下进行转换:
δ k l = [ 0 0 0 0 0 2 8 0 0 4 6 0 0 0 0 0 ] ⇒ 转 换 后 [ 2 0 0 0 0 0 0 8 0 4 0 0 0 0 6 0 ] (6) \delta_k^l =\begin{bmatrix} 0 & 0 & 0 & 0\\ 0 & 2 & 8 & 0\\ 0 & 4 & 6 & 0\\ 0 & 0 & 0 & 0 \end{bmatrix}\xRightarrow{转换后} \begin{bmatrix} 2 & 0 & 0 & 0\\ 0 & 0 & 0 & 8\\ 0 & 4 & 0 & 0\\ 0 & 0 & 6 & 0 \end{bmatrix} \tag6 δkl=0000024008600000 2000004000060800(6)

如果是average pooing,我们只需要将池化单元的误差平均值放回原来的子矩阵即可:
[ 0.5 0.5 2 2 0.5 0.5 2 2 1 1 1.5 1.5 1 1 1.5 1.5 ] (7) \begin{bmatrix} 0.5 & 0.5 & 2 & 2\\ 0.5 & 0.5 & 2 & 2\\ 1 & 1 & 1.5 & 1.5\\ 1 & 1 & 1.5 & 1.5 \end{bmatrix} \tag7 0.50.5110.50.511221.51.5221.51.5(7)
在这里插入图片描述

2.3 卷积层的反向传播

在这里插入图片描述
列出a,W,z的矩阵表达式如下:
[ z 11 z 12 z 21 z 22 ] = [ a 11 a 12 a 13 a 21 a 22 a 23 a 31 a 32 a 33 ] ∗ [ w 11 w 12 w 21 w 22 ] (9) \begin{bmatrix} z_{11} & z_{12}\\ z_{21} & z_{22} \end{bmatrix}= \begin{bmatrix} a_{11} & a_{12} & a_{13} \\ a_{21} & a_{22} & a_{23}\\ a_{31} & a_{32} & a_{33} \end{bmatrix}*\begin{bmatrix} w_{11} & w_{12}\\ w_{21} & w_{22} \end{bmatrix} \tag9 [z11z21z12z22]=a11a21a31a12a22a32a13a23a33[w11w21w12w22](9)
利用卷积的定义,很容易得出:(是卷积计算哦,不是点乘)
z 11 = a 11 w 11 + a 11 w 12 + a 21 w 21 + a 22 w 22 z 12 = a 12 w 11 + a 11 w 12 + a 22 w 21 + a 23 w 22 z 21 = a 21 w 11 + a 11 w 12 + a 31 w 21 + a 32 w 22 z 22 = a 22 w 11 + a 11 w 12 + a 32 w 21 + a 33 w 22 (10) \begin{aligned} z_{11} &=a_{11}w_{11}+a_{11}w_{12}+a_{21}w_{21}+a_{22}w_{22} \\ z_{12} &=a_{12}w_{11}+a_{11}w_{12}+a_{22}w_{21}+a_{23}w_{22} \\ z_{21} &=a_{21}w_{11}+a_{11}w_{12}+a_{31}w_{21}+a_{32}w_{22} \\ z_{22} &=a_{22}w_{11}+a_{11}w_{12}+a_{32}w_{21}+a_{33}w_{22} \end{aligned} \tag{10} z11z12z21z22=a11w11+a11w12+a21w21+a22w22=a12w11+a11w12+a22w21+a23w22=a21w11+a11w12+a31w21+a32w22=a22w11+a11w12+a32w21+a33w22(10)

在这里插入图片描述
在这里插入图片描述

2.4 推导卷积层梯度(W,b)

在这里插入图片描述
在这里插入图片描述

2.5 CNN反向传播算法总结

输入:m个图片样本,CNN模型的层数L和所有隐藏层的类型。对于卷积层,要定义卷积核的大小K,卷积核子矩阵的维度F,填充大小P,步幅S。对于池化层,要定义池化层区域大小k和池化标准(Max或Average)。对于全连接层,定义全连接层的激活函数(输出层除外)和各层神经元的个数。梯度迭代步长α,最大迭代次数Max和停止迭代阈值ϵ。

输出:CNN模型各隐藏层与输出层的W,b。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SongpingWang

你的鼓励是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值