iOS人工智能交流模型3

iOS人工智能交流模型1

iOS人工智能交流模型2

大纲
1. 神经网络学习
2. 常用模型分析
3. iOS中的CoreML等闭源库
4. 通过bench_ios中的CC_ANN使用激活函数ReLU和Sigmoid实现DNN网络。
5. caffe、tensorflow等对比

NLP处理
CS224n: Natural Language Processing with Deep Learning
https://www.youtube.com/watch?v=OQQ-W_63UgQ&list=PL3FW7Lu3i5Jsnh1rnUwq_TcylNr7EkRe6


Morphological 形态
Syntactic 句法
Semantic 语义
Discourse 论述


单词之间要有关联,无关的向量相乘=0
从相近单词理解一个新单词的意思

词的独热表示
tm  网络  模型  神经网络  分布式

a,b,c,d分别表示不同词,并附加找个词出现的频率,这些词就能有自己的路径和编码。

http://www.hankcs.com/nlp/word-vector-representations-word2vec.html

在word2vec中,约定编码方式和上面的例子相反,即约定左子树编码为1,右子树编码为0,同时约定左子树的权重不小于右子树的权重。

如今,深度学习炙手可热,deep learning在图像处理领域已经取得了长足的进展。随着Google发布word2vec,深度学习在自然语言处理领域也掀起了一阵狂潮。由于最近正在做一个相关的NLP项目,所以抽时间总结一下word2vec的相关知识点。
文章结构:
1、词的独热表示
2、词的分布式表示
3、词嵌入
4、两种训练模式
5、两种加速方法
6、word2vec和word embedding的区别

词的独热表示
到目前为止最常用的词表示方法是 One-hot Representation,这种方法把每个词表示为一个很长的向量。这个向量的维度是词表大小,其中绝大多数元素为 0,只有一个维度的值为 1,这个向量就代表了当前的词。
缺点分析:
1、向量的维度会随着句子的词的数量类型增大而增大;
2、任意两个词之间都是孤立的,无法表示语义层面上词汇之间的相关信息,而这一点是致命的。

Cocurrence matrix定义

缺点:仍然面对维度灾难。这SVD或者PCA等一些常用的降维方法也会带来其他的一些问题,例如,我们的词汇表中有新词加入,很难为他分配一个新的向量。

词的分布式表示
Dristributed representation可以解决One hot representation的问题,它的思路是通过训练,将每个词都映射到一个较短的词向量上来。所有的这些词向量就构成了向量空间,进而可以用普通的统计学的方法来研究词与词之间的关系。
比如下图我们将词汇表里的词用"Royalty","Masculinity", "Femininity"和"Age"4个维度来表示,King这个词对应的词向量可能是(0.99,0.99,0.05,0.7)。当然在实际情况中,我们并不能对词向量的每个维度做一个很好的解释。


CBOW与Skip-Gram用于神经网络语言模型
CBOW(Continuous Bag-of-Word Model)又称连续词袋模型,是一个三层神经网络。如下图所示,该模型的特点是输入已知上下文,输出对当前单词的预测。
在word2vec出现之前,已经有用神经网络DNN来用训练词向量进而处理词与词之间的关系了。采用的方法一般是一个三层的神经网络结构(当然也可以多层),分为输入层,隐藏层和输出层(softmax层)。
Skip-Gram模型和CBOW的思路是反着来的,即输入是特定的一个词的词向量,而输出是特定词对应的上下文词向量。还是上面的例子,我们的上下文大小取值为4, 特定的这个词"Learning"是我们的输入,而这8个上下文词是我们的输出。

word2vec基础之霍夫曼树
word2vec主要分为CBOW(Continuous Bag of Words)和Skip-Gram两种模式。CBOW是从原始语句推测目标字词;而Skip-Gram正好相反,是从目标字词推测出原始语句。CBOW对小型数据库比较合适,而Skip-Gram在大型语料中表现更好。

Negative Sampling
负采样对数据中重复的词去重,移除,可以大大减少计算量
将常见的单词组合(word pairs)或者词组作为单个“words”来处理。
对高频次单词进行抽样来减少训练样本的个数。
对优化目标采用“negative sampling”方法,这样每个训练样本的训练只会更新一小部分的模型权重,从而降低计算负担。


我们训练w和w’
https://cs224d.stanford.edu/lecture_notes/notes1.pdf
所以,需要定义loss function(一般为交叉熵代价函数),采用梯度下降算法更新W和W'。训练完毕后,输入层的每个单词与矩阵W相乘得到的向量的就是我们想要的词向量(word embedding),这个矩阵(所有单词的word embedding)也叫做look up table(其实聪明的你已经看出来了,其实这个look up table就是矩阵W自身),也就是说,任何一个单词的onehot乘以这个矩阵都将得到自己的词向量。有了look up table就可以免去训练过程直接查表得到单词的词向量了。
https://blog.csdn.net/bbbeoy/article/details/79224275?utm_source=copy
hash函数来初始化权重,默认使用python的hash函数

Softmax
指数函数可以把实数映射成正数,然后归一化得到概率。
softmax之所叫softmax,是因为指数函数会导致较大的数变得更大,小数变得微不足道;这种选择作用类似于max函数。


https://en.wikipedia.org/wiki/Word2vec
Hierarcical Softmax
因为其整个网络结构是线性的,没有激活函数并且取消了隐藏层。舍去了隐藏层到输出层的全连接结构,换成了霍夫曼树来代替隐藏层到输出层的映射。

Q3. 是否一定要用Huffman tree?A3. 未必,比如用完全二叉树也能达到O(log(N))复杂度。但 Huffman tree 被证明是更高效、更节省内存的编码形式,所以相应的权重更新寻优也更快。 举个简单例子,高频词在Huffman tree中的节点深度比完全二叉树更浅,比如在Huffman tree中深度为3,完全二叉树中深度为5,则更新权重时,Huffmantree只需更新3个w,而完全二叉树要更新5个,当高频词频率很高时,算法效率高下立判
https://blog.csdn.net/u010327784/article/details/80927207?utm_source=copy

分词
现有的分词算法可分为三大类:基于字符串匹配的分词方法、基于理解的分词方法和基于统计的分词方法
维特比算法
是一种动态规划算法。它用于寻找最有可能产生观测事件序列的维特比路径——隐含状态序列,特别是在马尔可夫信息源上下文和隐马尔可夫模型中。
https://zh.wikipedia.org/wiki/%E7%BB%B4%E7%89%B9%E6%AF%94%E7%AE%97%E6%B3%95

框架
tensorflow
Caffe2https://caffe2.ai/docs/operators.html
cuDNN的全称为NVIDIA CUDA® Deep Neural Network library,是NVIDIA专门针对深度神经网络(Deep Neural Networks)中的基础操作而设计基于GPU的加速库。cuDNN为深度神经网络中的标准流程提供了高度优化的实现方式,例如convolution、pooling、normalization以及activation layers的前向以及后向过程。
LMDB的全称是Lightning Memory-Mapped Database,闪电般的内存映射数据库。它文件结构简单,一个文件夹,里面一个数据文件,一个锁文件。数据随意复制,随意传输。它的访问简单,不需要运行单独的数据库管理进程,只要在访问数据的代码里引用LMDB库,访问时给文件路径即可。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值