斯坦福大学深度学习与自然语言处理第一讲:引言
13条回复
斯坦福大学在三月份开设了一门“深度学习与自然语言处理”的课程:CS224d: Deep Learning for Natural Language Processing,授课老师是青年才俊 Richard Socher,他本人是德国人,大学期间涉足自然语言处理,在德国读研时又专攻计算机视觉,之后在斯坦福大学攻读博士学位,拜师NLP领域的巨牛 Chris Manning 和 Deep Learning 领域的巨牛 Andrew Ng,其博士论文是《Recursive Deep Learning for Natural Language Processing and Computer Vision》,也算是多年求学生涯的完美一击。毕业后以联合创始人及CTO的身份创办了MetaMind,作为AI领域的新星创业公司,MetaMind创办之初就拿了800万美元的风投,值得关注。
回到这们课程CS224d,其实可以翻译为“面向自然语言处理的深度学习(Deep Learning for Natural Language Processing)”,这门课程是面向斯坦福学生的校内课程,不过课程的相关材料都放到了网上,包括课程视频,课件,相关知识,预备知识,作业等等,相当齐备。课程大纲相当有章法和深度,从基础讲起,再讲到深度学习在NLP领域的具体应用,包括命名实体识别,机器翻译,句法分析器,情感分析等。Richard Socher此前在ACL 2012和NAACL 2013 做过一个Tutorial,Deep Learning for NLP (without Magic),感兴趣的同学可以先参考一下: Deep Learning for NLP (without Magic) - ACL 2012 Tutorial - 相关视频及课件 。另外,由于这门课程的视频放在Youtube上,@爱可可-爱生活老师维护了一个网盘链接:http://pan.baidu.com/s/1pJyrXaF ,同步更新相关资料,可以关注。
第一讲:引言-自然语言处理与深度学习简介(Intro to NLP and Deep Learning)
推荐阅读材料:
- 线性代数相关知识点回顾:[Linear Algebra Review]
- 概率相关知识点回顾:[Probability Review]
- 凸优化相关知识点回顾: [Convex Optimization Review]
- 优化相关的另一篇介绍(来自于斯坦福CS231课程资料),随机梯度下降相关[More Optimization (SGD) Review]
- 语义向量空间模型的一篇综述[From Frequency to Meaning: Vector Space Models of Semantics]
- 课程第一部分的Notes,涉及第一讲和第二讲[Lecture Notes 1]
- python及numpy简介[python tutorial]
- 第一讲Slides[slides]
- 第一讲视频[video]
以下是第一讲的相关笔记,主要参考自课程的slides,视频和其他相关资料。
什么是自然语言处理(NLP)
- 自然语言处理是一门交叉学科,包括计算机科学,人工智能和语言学
- 目标:让计算机去处理或“理解”自然语言, 完成一些有用的任务例如问答系统,机器翻译
- 完全理解或者表示语言的意义(甚至去定义它)都是一个虚幻的目标
- 完美的理解语言是一个“AI-complete”的问题
自然语言处理的层次
自然语言处理的应用
- 应用范围从简单到复杂
- 拼写检查, 关键词提取&搜索,同义词查找&替换
- 从网页中提取有用的信息例如产品价格,日期,地址,人名或公司名等
- 分类,例如对教科书的文本进行分级,对长文本进行正负情绪判断
- 机器翻译
- 口语对话系统
- 复杂的问答系统
工业届里的NLP应用
- 搜索引擎
- 在线广告
- 自动的或辅助的翻译技术
- 市场营销或者金融交易领域的情感分析
- 语音识别
NLP为什么这么难
- 语言在表达上就很复杂,使用的时候要综合考虑使用情境
- Jane hit June and then she [fell/ran].
- 歧义问题:“I made her duck”
什么是深度学习(DL)
- 深度学习是机器学习的一个分支
- 大多数机器学习方法很有效主要依靠人工精心设计的特征,例如下表是一个命名实体识别任务中设计的特征模板(Finkel, 2010)
- 最终这些机器学习问题会变成优化问题:优化这些特征权重以达到最好的预测效果
机器学习 vs 深度学习
什么是深度学习(DL)续
- 表示学习 or 表达学习(Representation Learning)尝试自动的学习合适的特征及其表征
- 深度学习(Deep Learning) 算法尝试学习(多层次)的表征以及输出
- 从一个“原生”的输入x(例如“单词”)
深度学习的历史
探索深度学习的原因
- 人工设计的特征常常定义过多,不完整并且需要花费大量的时间去设计和验证
- 自动学习的特征容易自适应,并且可以很快的学习
- 深度学习提供了一个弹性的,通用的学习框架用来表征自然的,视觉的和语言的信息。
- 深度学习可以用来学习非监督的(来自于生文本)和有监督的(带有特别标记的文本,例如正向和负向标记)
- 在2006年深度学习技术开始在一些任务中表现出众,为什么现在才热起来?
- 深度学习技术受益于越来越多的数据
- 更快的机器与更多核CPU/GPU对深度学习的普及起了很大的促进作用
- 新的模型,算法和idea层出不穷
- 通过深度学习技术提升效果首先发生在语音识别和机器视觉领域,然后开始过渡到NLP领域
面向语音识别的深度学习
面向计算机视觉的深度学习
Deep Learning + NLP = Deep NLP
- 综合使用一些深度学习的方法来解决NLP的相关问题
- 近几年在NLP的一些应用领域效果有了较大的提升
- 层次:语音,词形,句法,语义
- 应用:机器翻译,情感分析,问答系统
音位学层次的表示
- 传统的方法:音素
- 深度学习:通过声音特征并将这些特征表示为向量直接来预测音素(或词语)
形态学层次的表示
- 传统的方法:语素,例如前缀,词干,后缀等
- 深度学习:
- 每个语素都用向量表示
- 神经网络用于向量的两两合并
- Thang et al. 2013
句法层次的表示
- 传统的方法:将一个短语或句子划分到多个句法标记,例如NP,VP等
- 深度学习
- 每个单词或者短语都是一个向量
- 神经网络用于向量的两两合并
- Socher et al. 2011
语义层次的表示
- 传统的方法: Lambda算子 or Lambda演算(Lambda calculus)
- 非常精细的函数设计
- 需要指定其他函数的输入
- 没有相似性的概念或者模糊语言
- 每个单词或者短语或者逻辑表达式都是一个向量
- 神经网络用于向量的两两合并
- Bowman et al. 2014
NLP应用:情感分析
NLP应用:问答系统
- 传统的方法:用了非常多的特征工程去获取相关的知识,例如正则表达式,Berant et al. (2014)
- 深度学习:和上述词素,句法,语义,情感分析相似的深度学习模型
- 知识可以储备在向量中
NLP应用:机器翻译
- 过去尝试过很多层次的机器翻译方法
- 传统的机器翻译系统是一个非常大的复杂系统
- 可以思考一下在深度学习中中间语(interlingua)对于翻译系统是如何起作用的?
- 深度学习:
可以发现所有NLP层次的表示都涉及到向量(Vectors), 下一讲将讲到如何来学习词向量以及这些向量表示了什么?
第二讲:简单的词向量表示:word2vec, Glove(Simple Word Vector representations: word2vec, GloVe)
推荐阅读材料:
- Paper1:[Distributed Representations of Words and Phrases and their Compositionality]]
- Paper2:[Efficient Estimation of Word Representations in Vector Space]
- 第二讲Slides [slides]
- 第二讲视频 [video]
以下是第二讲的相关笔记,主要参考自课程的slides,视频和其他相关资料。
如何来表示一个词的意思(meaning)
- the idea that is represented by a word, phrase, etc.
- the idea that a person wants to express by using words, signs, etc.
- the idea that is expressed in a work of writing, art, etc.
- 通常使用类似Wordnet的这样的语义词典,包含有上位词(is-a)关系和同义词集
- panda的上位词,来自于NLTK中wordnet接口的演示
- good的同义词集
- 语义词典资源很棒但是可能在一些细微之处有缺失,例如这些同义词准确吗:adept, expert, good, practiced, proficient,skillful?
- 会错过一些新词,几乎不可能做到及时更新: wicked, badass, nifty, crack, ace, wizard, genius, ninjia
- 有一定的主观倾向
- 需要大量的人力物力
- 很难用来计算两个词语的相似度
- 传统的基于规则或基于统计的自然语义处理方法将单词看作一个原子符号:hotel, conference, walk
- 在向量空间的范畴里,这是一个1很多0的向量表示:[0,0,0,0,...,0,1,0,...,0,0,0]
- 维数:20K(speech)–50K(PTB)–500K(big vocab)–13M(Google 1T)
- 这就是"one-hot"表示,这种表示方法存在一个重要的问题就是“词汇鸿沟”现象:任意两个词之间都是孤立的。光从这两个向量中看不出两个词是否有关系:
- Distributional similarity based representations
- 通过一个词语的上下文可以学到这个词语的很多知识
- 这是现代统计NLP很成功的一个观点
- 答案:使用共现矩阵(Cooccurrence matrix)X
- 2个选择:全文还是窗口长度
- word-document的共现矩阵最终会得到泛化的主题(例如体育类词汇会有相似的标记),这就是浅层语义分析(LSA, Latent Semantic Analysis)
- 窗口长度容易捕获语法(POS)和语义信息
- 窗口长度是1(一般是5-10)
- 对称(左右内容无关)
- 语料样例
- I like deep learning.
- I like NLP.
- I enjoy flying
- 规模随着语料库词汇的增加而增加
- 非常高的维度:需要大量的存储
- 分类模型会遇到稀疏问题
- 模型不够健壮
- idea: 将最重要的信息存储在固定的,低维度的向量里:密集向量(dense vector)
- 维数通常是25-1000
- 问题:如何降维?
- 对共现矩阵X进行奇异值分解
- 语料:I like deep learning. I like NLP. I enjoy flying
- 打印U矩阵的前两列这也对应了最大的两个奇异值
- 在相关的模型中,包括深度学习模型,一个单词常常用密集向量(dense vector)来表示
- 功能词(the, he, has)过于频繁,对语法有很大影响,解决办法是降低使用或完全忽略功能词
- 延展窗口增加对临近词的计数
- 用皮尔逊相关系数代替计数,并置负数为0
- +++
- 使用SVD存在的问题
- 对于n*m矩阵来说计算的时间复杂度是o(mn^2) 当 n
- 对于新词或者新的文档很难及时更新
- 相对于其他的DL模型,有着不同的学习框架
- 预测一个窗口长度为c的窗口内每个单词的周边单词概率
- 目标函数:对于一个中心词,最大化周边任意单词的log概率
- 对于$p(w_{t+j}/w_t)$最简单的表达式是:
- 这里v和$v^'$分布是w的“输入”和“输出”向量表示(所以每个w都有两个向量表示)
- 这就是基本的“动态”逻辑回归(“dynamic” logistic regression)
- 我们的目标是优化(最大化或最小化)代价/目标函数
- 常用的方法:梯度下降
- 一个例子(来自于维基百科): 寻找函数$f(x) = x^4 - 3x^3 + 2$的局部最小点,其导数是$f^'(x) = 4x^3 - 9x^2$
- Python代码:
- 白板(建议没有直接上课的同学看一下课程视频中的白板推导)
- 有用的公式
- 链式法则
- 在嵌入空间里相似度的维度可以用向量的减法来进行类别测试
- 计数的方法 vs 直接预测
- GloVe: 综合了两类方法的优点
- 训练更快
- 对于大规模语料算法的扩展性也很好
- 在小语料或者小向量上性能表现也很好
- 英文单词frog(青蛙)的最相近的词
- 对单词之间的线性关系进行测试(Mikolov et al.(2014))
- Glove可视化一
- Glove可视化二:Company-CEO
- Glove可视化三:Superlatives
- Word embedding matrix(词嵌入矩阵)
- 提前训练好的词嵌入矩阵
- 又称之为查询表(look-up table)
- 深度学习词向量的最大优势是什么?
- 可以将任何信息表征成词向量的形式然后通过神经网络进行传播
- 词向量将是之后章节的基础
- 我们所有的语义表示都将是向量形式
- 对于长的短语和句子也可以通过词向量的形式组合为更复杂的表示,以此来解决更复杂的任务-->下一讲
第三讲:高级的词向量表示(Advanced word vector representations: language models, softmax, single layer networks)
推荐阅读材料:
- Paper1:[GloVe: Global Vectors for Word Representation]
- Paper2:[Improving Word Representations via Global Context and Multiple Word Prototypes]
- Notes:[Lecture Notes 2]
- 第三讲Slides [slides]
- 第三讲视频 [video]
以下是第三讲的相关笔记,主要参考自课程的slides,视频和其他相关资料。
回顾:简单的word2vec模型
- 代价函数J
- 其中的概率函数定义为:
- 我们主要从内部向量(internal vector)$v_{w_I}$导出梯度
计算所有的梯度
- 我们需要遍历每一个窗口内的中心向量(center vector)的梯度
- 我们同时需要每一个外部向量(external vectors)$v^'$的梯度
- 通常的话在每一个窗口内我们将更新计算所有用到的参数
- 例如在一个窗口长度为1的句子里:I like learning
- 第一个窗口里计算的梯度包括:内部向量$v_{like}$, 外部向量$v^'_I$及$v^'_{learning}$
- 同理更新计算句子的下一个窗口里的参数
计算所有的向量梯度
- 我们经常在一个模型里把所有的参数集合都定义在一个长的向量$\theta$里
- 在我们的例子里是一个d维度的向量及一个长度为V的词汇集:
梯度下降
- 要在整个训练集上最小化代价函数$J(\theta)$需要计算所有窗口里的参数梯度
- 对于参数向量$\theta$来说需要更新其中每一个元素:
- 这里$\alpha$是步长
- 从矩阵的角度来看参数更新:
梯度下降相关代码
随机梯度下降(SGD)
- 对于上述梯度下降的方法,训练集语料库有可能有400亿(40B)的token和窗口
- 一轮迭代更新需要等待很长的时间
- 对于非常多的神经网络节点来说这不是一个好方法
- 所以这里我们使用随机梯度下降(SGD):在每一个窗口计算完毕后更新所有的参数
词向量的随机梯度下降
- 但是在每一个窗口里,我们仅有2c-1个词,这样的话$\delta_{\theta}J_t(\theta)$非常稀疏
- 我们也许仅仅应该只更新那些确实存在的词向量
- 解决方案:或者保留词向量的哈稀或者更新词嵌入矩阵L和$L^'$的固定列
- 很重要的一点是如果你有上百万个词向量并且在做分布式训练的话就不需要发送大量的更新信息了
PSet1
- 归一化因子的计算代价很大
- 因此在PSet1你们将实现skip-gram模型
- 主要的思路:对一对实际的词对(一个中心词及一个窗口内的其他词)和一些随机的词对(一个中心词及一个随机词)训练二元逻辑回归模型
PSet1: The skip-gram model and negative sampling
What to do with the two sets of vectors?
如何评测词向量
- 和一般的NLP评测任务相似:内部 vs 外部(Intrinsic vs extrinsic)
- 内部评测:
- 在一个特定的子任务中进行评测
- 计算迅速
- 有助于理解相关的系统
- 不太清楚是否有助于真实任务除非和实际的NLP任务的相关性已经建立起来
- 在一个真实任务中进行评测
- 需要花很长的实际来计算精度
- 不太清楚是否是这个子系统或者其他子系统引起的问题
- 如果用这个子系统替换原有的系统后获得精度提升-->有效(Winning!)
词向量的内部评测:
- 词向量类比:语法和语义
- 通过评测模型在一些语义或语法类比问题上的余弦相似度距离的表现来评测词向量
- 去除一些来自于搜索的输入词
- 问题:如果信息符合但不是线性的怎么办?
词向量的内部评测例一
词向量的内部评测例二
词向量的内部评测例三
词向量的内部评测例四
类比评测和超参数
- 目前为止最细致的评测: GloVe 词向量
- 非对称上下文(仅有左侧的单词)并不是很好
- 最佳的向量维度:300左右,之后变化比较轻微
- 但是对于不同的“下游”任务来说最佳的维度也会不同
- 对于GloVe向量来说最佳的窗口长度是8
- 训练的时间约长是否有帮助:对于GloVe来说确实有助于
- 更多的数据是否有帮助?维基百科的数据比新闻数据更相关
词向量的内部评价
如何应对歧义问题(But what about ambiguity?)
词向量的外部评价
- 一个例子NER(named entity recognition):好的词向量会对实际任务有直接的帮助
- 命名实体识别(NER):找到人名,地名和机构名
简单的单个词的分类问题
- 国家类的单词可以聚和到一起-->因此可以通过词向量将地名类的单词区分出来
- 可以将情感分析(Sentiment)问题映射到单词分类中:在语料库中寻找最具代表性的正/负例单词
The Softmax
- 逻辑回归 = Softmax分类在给定词向量x的情况下获得y类的概率
The Softmax - 细节
- 术语:损失函数(Loss function) = 代价函数(Cost function) = 目标函数(Objective function)
- Softmax的损失(Loss): 交叉熵(Cross Entropy)
- 如何计算p(y|x): 取W的$y^'$行乘以含x的行
- 计算所有的$f_c$, c = 1, 2, ... , C
- 归一化计算Softmax函数的概率
Softmax和交叉熵误差
- 目标是最大化正确分类y的概率
- 因此,我们可以最小化改函数负的对数概率
- 因此,如果有多个类别我们可以在总的误差函数中叠加多个交叉熵误差
背景:交叉熵 & KL散度
- 假设分布是:p = [0,...,0,1,0,...0], 对应计算的概率分布是q,则交叉熵是:
- 因为p是one-hot的缘故,则上述公式剩余的则是真实类的负的对数概率
- 交叉熵可以写成熵和两个分布的KL散度之和
- 在我们的case里p是0(即使不是0也会因为它是固定的对梯度没有固定),最小化交叉熵等价于最小化KL散度
- KL散度并非是一个距离函数而是一个对于两个概率分布差异的非对称的度量
- 维基百科:KL散度是两个概率分布P和Q差别的非对称性的度量。 KL散度是用来 度量使用基于Q的编码来编码来自P的样本平均所需的额外的位元数。 典型情况下,P表示数据的真实分布,Q表示数据的理论分布,模型分布,或P的近似分布。
简单的单个单词分类
- 例子:情感分析
- 两个选择:仅仅训练softmax权重W或者同时训练词向量
- 问题:训练词向量的优点和缺点是什么
- Pro: 更好的适应训练数据
- Con: 更差的泛化能力
训练的词向量的情感分享可视化
继续“打怪升级”:窗口分类(Window classification)
- 单个的单词没有上下文信息
- 通过对窗口中的中心词进行分类同时考虑窗口中的上下文
- 可能性:Softmax 和 交叉熵误差 或者 最大边界损失(max-margin loss)
- 我们将在下一讲中探索这些问题(next class)
第四讲:词窗口分类和神经网络(Word Window Classification and Neural Networks)
推荐阅读材料:
- [UFLDL tutorial]
- [Learning Representations by Backpropogating Errors]
- 第四讲Slides [slides]
- 第四讲视频 [video]
以下是第四讲的相关笔记,主要参考自课程的slides,视频和其他相关资料。
本讲概览
- 分类问题背景
- 在分类任务中融入词向量
- 窗口分类和交叉熵误差推导技巧
- 一个单层的神经网络
- 最大间隔损失和反向传播
分类问题定义
{xi,yi}Ni=1{xi,yi}i=1N
- 其中xixi是输入,例如单词(标识或者向量),窗口内容,句子,文档等
- yiyi是我们希望预测的分类标签,例如情绪指标,命名实体,买卖决定等
分类问题直窥
- 训练集:{xi,yi}Ni=1{xi,yi}i=1N
- 一个简单的例子
- 一个固定的2维词向量分类
- 使用逻辑回归
- ->线性决策边界->
- 从机器学习的角度来看:假设x是固定的,仅仅更新的是逻辑回归的权重W意味着仅仅修改的是决策边界
分类问题符号定义
- 一般的机器学习问题: 仅仅更新逻辑回归的权重意味着仅仅更新的是决策边界
- 数据集{xi,yi}Ni=1{xi,yi}i=1N的损失函数
- 其中对于每一个数据对(xi,yi)(xi,yi):
分类问题:正则化
- 通常情况下任何一个数据集上完整的损失函数都会包含一个针对所有参数的正则化因子
- 正则化可以防止过多的特征导致的过拟合问题(另一种解决方案是一个强有力/深度模型)
- 上图中x轴代表了更强有力的模型后者更多的模型迭代次数
- 蓝色代表训练集误差,红色代表测试集误差
机器学习优化问题
引入词向量
重新训练词向量会丧失泛化能力
- 例子:针对电影评价情感数据(movie review sentiment)训练逻辑回归模型,在训练集里我们有单词"TV"和"telly"
- 在测试集里我们有单词“television”
- 原本它们是相似的单词(来自于已经训练的词向量模型)
- 当我们重新训练的时候会发生什么?
重新训练词向量会丧失泛化能力续
- 在训练集中的单词会被重新安排到合适的位置
- 在已经训练的词向量模型中但是不在训练集中的单词将保留在原来的位置
- 对于上例, "TV"和"telly"会被重新安排,而"television"则保留在原位,尴尬的事情就发生了:
- 如果你只有一个很小的训练集,不要训练词向量模型
- 如果你有一个足够大的训练集,那么对于相应的任务来说训练词向量模型是有益的
词向量概念回顾
- 词向量矩阵L也被称为查询表
- Word vectors(词向量)= word embeddings(词嵌入) = word representations(mostly)
- 类似于word2vec或者GloVe的方法得到:
- 这就是词特征xwordxword
- 通常通过词向量矩阵L和one-hot向量e相乘得到单个的词向量:
窗口分类
- 单个单词的分类任务很少
- 在上下文中解决歧义问题
- 例子1:
- 例子2:
- 思路:将对一个单词进行分类的问题扩展到对其临近词和上下文窗口进行分类
- 例如命名实体问题有4个类别:人名,地名,机构名和其他
- 已经有很多方法在尝试对一个上下文中的单词进行分类,例如将窗口内的单词(向量)进行平均化处理,但是这样会失去位置信息
- 以下介绍一种常用的对窗口(上下文)中单词进行分类的方法
- 对于窗口中的单词打上标签同时把它前后的单词向量进行拼接然后训练一个分类器
- 例子:对于一个句子上下文中的"Paris"进行分类,窗口长度为2
- 结果得到的窗口向量 xwindow=x∈R5dxwindow=x∈R5d , 是一个列向量
简单的窗口分类器: Softmax
- 在得到窗口向量x=xwindowx=xwindow的情况下,我们可以和之前一样使用softmax分类器
- 但是如何更新词向量?
- 简单的回答:和之前一样进行求导
- 更长的回答:让我们一起来一步一步进行推导
- 定义:
- yˆy^: softmax 概率输出向量
- t: 目标概率分布
- f=Wx∈Rcf=Wx∈Rc, 其中fcfc是f向量的第c个因子
- 第一次看到是不是觉得很难,下面给出一下提示(tips)
更新拼接的词向量:Tips
- 提示1:仔细定义变量和跟踪它们的维度
提示2:懂得链式法则(chain rule)并且记住在哪些变量中含有其他变量
提示3:对于softmax中求导的部分:首先对fcfc当c=y(正确的类别)求导,然后对fcfc当c≠yc≠y(其他所有非正确类别)求导
提示4:当你尝试对f中的一个元素求导时,试试能不能在最后获得一个梯度包含的所有的偏导数
提示5:为了你之后的处理不会发疯,想象你所有的结果处理都是向量之间的操作,所以你应该定义一些新的,单索引结构的向量
提示6:当你开始使用链式法则时,首先进行显示的求和(符号),然后再考虑偏导数,例如xixi or WijWij的偏导数
提示7:为了避免之后更复杂的函数(形式),确保知道变量的维度,同时将其简化为矩阵符号运算形式
提示8:如果你觉得公式不清晰的话,把它写成完整的加和形式
更新拼接的词向量
- 窗口向量梯度的维度是多少?
- X是整个拼接的词向量窗口,5倍的d维度向量,所以对于x的求导后依然有相同的向量维度(5d)
- 对整个窗口向量的更新和梯度推导可以简单的分解到对每一个词向量的推导:
- 这将保留词向量的原始位置信息有助于一些NLP任务,例如命名实体识别
- 例如,模型将会学习到出现在中心词前面的xinxin常常表示中心词是一个地名(location)
在训练窗口向量时丢失了什么信息?
- 梯度J相对于softmax权重W
- 步骤相似,但是先写出偏导数WijWij
- 然后我们就有了完整的:
矩阵实现的一些注解
- 在softmax中有两个代价昂贵的运算: 矩阵运算 f = Wx 和 exp指数运算
- 在做同样的数学运算时for循环永远没有矩阵运算有效
- 样例代码 -->
- 遍历词向量 VS 将它们拼接为一个大的矩阵 然后分别和softmax的权重矩阵相乘
- 运行结果:
- 结果证明矩阵相乘C×XC×X更有效
- 矩阵运算更优雅更棒
- 应该更多的去测试你的代码速度
softmax(=逻辑回归)并不是强有力的
- softmax仅仅在原有的空间上给出线性决策边界
- 在少量的数据上(正则化)效果会不错
- 在大量的数据上效果会有限
- softmax仅仅给出线性决策边界举例:
神经网络更胜一筹
- 神经网络可以学习更复杂的函数和非线性决策边界
从逻辑回归到神经网络--神经网络解密
- 神经网络有自己的术语定义集,就像SVM一样
- 但是如果你了解softmax的运行机制,那你就已经了解了一个基本的神经元的运行机制
- 例子:一个神经元就是一个基础的运算单位,拥有n(3)个输入和一个输出,参数是W, b
一个神经元本质上是一个二元逻辑回归单元
一个神经网络等价于同时运行了很多逻辑回归单元
- 如果我们给一批逻辑回归函数一堆输入向量,我们就得到了一批输出向量...
- 这些输出又可以作为其他逻辑回归函数的输入
- 然后我们就有了多层神经网络
神经网络中单层的矩阵符号表示
- 我们有:
- 表示成矩阵符号形式:
- 其中f应用的是element-wise规则:
为什么需要非线性的f
- 例子:函数逼近,例如回归或者分类问题
- 没有非线性函数,深度神经网络相对于线性变换价值不大
- 其他的层次会被编译压缩为单个的线性变换: W1W2X=WXW1W2X=WX
- 有了更多的层次,它们可以逼近更复杂的函数
一个更牛的窗口分类器
- 基于神经网络进行修正
- 单个(神经网络)层是一个线性层(函数)和非线性函数的组合
- 神经网络激活函数αα可以用来计算一些函数
- 例如,一个softmax概率分布或者一个没有归一化的打分函数可以是这样的:
总结:前馈网络计算
- 通过一个三层神经网络计算这个窗口向量的得分:s = score(museums in Paris are amazing)
下一讲
- 训练一个基于窗口(向量)的神经网络模型
- 进行更复杂的深度推导-->反向传播算法
- 这样我们就有了所有的基础工具去学习一个更复杂的深度模型:)