文章目录
- 一、概述神经网络
- 1.1 项目背景:个性化推荐意义
- 1.2 神经网络基础知识精讲
- 1.3 word2vec 词向量原理
- word2vec 神经网络模型
- 1.4 协同过滤:item embedding
- 1.5 应用方向
- 二、反向传播
- 2.1 DNN反向传播算法
- 2.2 CNN反向传播算法
- 2.3 卷积层的反向传播
- 2.4 推导卷积层梯度(W,b)
- 2.5 CNN反向传播算法总结
一、概述神经网络
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编码很多位是0,最终神经网络计算量不大
可以只考虑高频词,从而避免过分膨胀
word2vec优点
1 分布假说(只考虑近距离的词,语境/上下文)
2 在小范围内,可以不考虑字的顺序
3 试验表明,考虑太多细节(比如语法)效果不一定更好
word2vec 神经网络模型
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
1 关键词 textrank 根据两个词互相投票来确定一个词的重要性 pagerank’财经’,‘发展’,‘银行’/3 来计算平均向量
2 投票用词向量夹角余弦来计算
3 textrank
优点:不管一片文章中两个词的相隔距离,根据相应的词向量,计算相似度
4 归类,计算平均向量 与各个类别向量的距离 可以对文章进行归类
1.5 应用方向
- 初始推荐系统
- 推荐系统知识
新浪网:猜你喜欢
网易: 今日点击
新闻T字形标签提取
新闻推荐
- 总结和拓展
总结
自编码网络
二、反向传播
2.1 DNN反向传播算法
2.2 CNN反向传播算法
对比深度神经网络反向传播算法,卷积神经网络反向传播算法需要解决以下几个问题。
由于卷积层可以有多个卷积核,各个卷积核之间的处理方式是完全相同的,为了简化算法公式的复杂度,下面推导时只针对卷积层中若干卷积核中的一个。
- 池化层的反向传播
池化层没有激活函数可以直接看成用线性激活函数,即,所以
。接下来看看池化层如何递推
。
在前向传播时,我们一般使用 max或 average对输入进行池化,而且池化区域大小已知。反向传播就是要从缩小后的误差,还原池化前较大区域对应的误差
。根据(2)式子,在DNN中
是已知的,所以我们可以直接通过矩阵乘法将
层的误差映射回
层的误差,但对于池化层,要求
用一个例子可以很清楚的解释这一过程:假设现在我们是步长为1的 2×2 池化,4×4大小的区域经过池化后变为2×2。如果 的第 k个子矩阵为:
首先我们对 进行还原。 如果是max pooling,我们只需要记录前向传播中最大值的位置,然后将误差放回去即可。如果最大值位置分别为 2×2 的左上,右下,右上,左下进行转换:
如果是average pooing,我们只需要将池化单元的误差平均值放回原来的子矩阵即可:
2.3 卷积层的反向传播
列出a,W,z的矩阵表达式如下:
利用卷积的定义,很容易得出:(是卷积计算哦,不是点乘)
2.4 推导卷积层梯度(W,b)
2.5 CNN反向传播算法总结
输入:m个图片样本,CNN模型的层数L和所有隐藏层的类型。对于卷积层,要定义卷积核的大小K,卷积核子矩阵的维度F,填充大小P,步幅S。对于池化层,要定义池化层区域大小k和池化标准(Max或Average)。对于全连接层,定义全连接层的激活函数(输出层除外)和各层神经元的个数。梯度迭代步长α,最大迭代次数Max和停止迭代阈值ϵ。
输出:CNN模型各隐藏层与输出层的W,b。