Author Archives: admin

《三国演义》每回内容梗概(31~60)

第三十一回 曹操仓亭破本初 玄德荆州依刘表

袁绍手下主要有三股势力:长子袁谭守青州;次子袁熙守幽州;三子袁尚,后妻刘氏所生,绍最爱之,留身边,守冀州;外甥高干守并州。听说袁绍官渡之战败了,都来支援。于是袁绍聚集四州兵马,屯兵仓亭,准备再和曹操干一仗。结果,曹操谋士程昱献十面埋伏之计,大败袁绍,于是袁绍回老巢,转为防守。

却说刘备势力趁曹操忙于官渡、仓亭之战,偷袭许昌。曹操打败了袁绍之后,赶紧南下收拾刘备。刘备大败,谋士孙乾建议投靠荆州刘表。刘表谋士蔡瑁进谏:不可。刘备先从吕布,后事曹操,近投袁绍,皆不克终,足可见其为人。今若纳之,曹操必加兵于我,枉动干戈。不如斩孙乾之首,以献曹操,操必重待主公也。不过孙乾凭口才和智勇,打动刘表,刘表同意接受刘备。

Continue reading

CS224N(1.10)Word Vectors 2 and Word Senses

这一讲是上一讲的补充,内容比较零碎,包括:Word2vec回顾、优化、基于统计的词向量、GloVe、词向量评价、词义等,前两个内容没必要再介绍了,下面逐一介绍后四个内容。

基于统计的词向量

词向量的目的就是希望通过低维稠密向量来表示词的含义,而词的分布式语义表示方法认为词的含义由其上下文语境决定。Word2vec把中心词和临近词抽取出来,通过预测的方式训练得到词向量。在Word2vec之前,传统的方式通过统计词的共现性来得到词向量,即一个词的词向量表示为其临近词出现的频率,如果两个词的含义很相近,则其临近词分布会比较像,得到的词向量也比较像。其具体计算过程在第一次作业中有详细的描述,这里再简单回顾如下。

假设一个语料库中包含三个句子,共有8个特异词(包括点号),对于每个词,统计其前后一个词的词频(临近窗口为1),由此能得到一个8×8的对称矩阵,其每一行(或每一列)表示该词的词向量。比如对于like这个词,在三个句子中,其左右共出现2次I,1次deep和1次NLP,所以like对应的词向量中,I、deep和NLP维的值分别为2,1,1。

Continue reading

CS224N(1.8)Introduction and Word Vectors

今天开始介绍大名鼎鼎的NLP网课Stanford-CS224N。第一讲内容为课程简介和词向量。

词向量即用来表示这个词的含义的向量。早期的NLP常用one-hot编码来表示词向量,假如词典中共有10000个词,则这个one-hot向量长度就是10000,该词在词典中所处位置对应的值为1,其他值为0。

one-hot表示方法虽然简单,但其有诸多缺点:1. 词典中的词是不断增多的,比如英语,通过对原有的词增加前缀和后缀,可以变换出很多不同的词,one-hot编码会导致向量维度非常大,且每个向量是稀疏的;2. 不同词的one-hot编码向量是垂直的,在向量空间中无法表示近似关系,即使两个含义相近的词,它们的词向量点积也为0。

既然one-hot编码有这么多缺点,那我们就换一种编码,one-hot是高维稀疏向量,那新的编码就改用低维稠密向量,这样就解决了上述问题,那么怎样得到一个词的低维稠密的词向量呢?这就是word2vec算法。

Continue reading

“蛋白质结构预测”问题描述

相信很多学CS的同学之前都没听说过“蛋白质结构预测”这个问题,直到2018年12月初,一则劲爆消息瞬间引爆了CSer的朋友圈,那就是Google Deepmind团队开发的AlphaFold一举拿下当年的CASP比赛冠军,而且远远甩开了第二名。我当时就转载过类似的公众号文章,大家可以阅读并想象当时朋友圈的欢呼声:阿尔法狗再下一城 | 蛋白结构预测AlphaFold大胜传统人类模型

当时,很多同学也转载过类似的文章,但其实很少有人真正明白“蛋白质结构预测”这个问题是什么,它的难度有多大,CASP是个什么比赛,以及AlphaFold的内部原理是什么。当然,对于这一连串的问题,我当时也是懵逼的。不过自己好歹也是个跟蛋白质有关的PhD,如此热点事件,自然是要关注的。不过之后一直没时间,直到今年相关顶级文章再次爆出,我就借着准备文献讲评的机会了解了相关的知识,在这里跟大家分享一下。

https://upload.wikimedia.org/wikipedia/commons/a/a9/Protein_folding.png
Continue reading

Neural Networks and Deep Learning(七)番外篇·Pytorch MNIST教程

由于本书成书较早(2015),作者当时使用的是Theano,但Theano已不再维护,所以本博客使用当下流行的Pytorch框架讲解MNIST图片分类的代码实现,具体就是Pytorch官方给出的MNIST代码:
https://github.com/pytorch/examples/tree/master/mnist

使用该工具在线制作:
http://alexlenail.me/NN-SVG/LeNet.html
Continue reading

《三体》始末

简化版:

  1. 叶文洁向宇宙发射了一个信号
  2. 三体人接收到了这个信号
  3. 三体人计划逃离水深火热的三体星系,殖民太阳系
  4. 地球人在保卫太阳系的末日之战中,被三体舰队团灭,太阳系岌岌可危
  5. 罗辑参透了黑暗森林法则,并假借雪地工程实现了对三体星系的威慑,三体撤军,太阳系幸存
  6. 罗辑年老体衰,程心接替罗辑成为新的执剑人
  7. 三体人预料到程心心慈手软,不敢实施黑暗森林打击
  8. 三体人果断进军太阳系,程心果然没有实施黑暗森林打击,地球沦为三体人的殖民地
  9. 在太空执行任务的地球飞船发射了三体坐标,三体再次撤军,并随后遭到黑暗森林打击,三体星系灭亡
  10. 发射三体坐标也暴露了太阳系坐标,太阳系遭到更高级的打击——降维打击,太阳系被二维化
  11. 程心借助光速飞船逃离太阳系来到了云天明送给她的类地行星蓝星上
  12. 程心又进入了云天明送给她的平行小宇宙,企图躲避大宇宙的归零大爆炸
  13. 太多的小宇宙导致大宇宙质量流失,无法归零
  14. 大宇宙向所有宇宙发布回归运动声明,请求小宇宙归还质量
  15. 程心最终归还质量,回到了大宇宙
  16. 大宇宙坍缩成奇点,完成大爆炸,宇宙开始了新的轮回

Continue reading

Neural Networks and Deep Learning(六)深度学习

今天我们终于进入到了本书的重头戏——深度学习。其实,这一章的深度学习主要介绍的是卷积神经网络,即CNN。

本书之前的章节介绍的都是如下图的全连接网络,虽然全连接网络已经能够在MNIST数据集上取得98%以上的测试准确率,但有两个比较大的缺点:1. 训练参数太多,容易过拟合;2. 难以捕捉图片的局部信息。第一点很好理解,参数一多,网络就难以训练,难以加深。对于第二点,因为全连接的每个神经元都和上一层的所有神经元相连,无论距离远近,也就是说网络不会捕捉图片的局部信息和空间结构信息。

Continue reading

Neural Networks and Deep Learning(五)为什么深度神经网络难以训练

本章我们将分析一下为什么深度神经网络难以训练的问题。

首先来看问题:如果神经网络的层次不断加深,则在BP误差反向传播的过程中,网络前几层的梯度更新会非常慢,导致前几层的权重无法学习到比较好的值,这就是梯度消失问题(The vanishing gradient problem)。

以我们在第三章学习的network2.py为例(交叉熵损失函数+Sigmoid激活函数),我们可以计算每个神经元中误差对偏移量b的偏导\partial C/ \partial b,根据第二章BP网络的知识,\partial C/ \partial b也是\partial C/ \partial w的一部分(BP3和BP4的关系),所以如果\partial C/ \partial b的绝对值大,则说明梯度大,在误差反向传播的时候,bw更新就快。

Continue reading

Neural Networks and Deep Learning(四)图解神经网络为什么能拟合任意函数

我们应该都听说过神经网络强大到能拟合任意一个函数,但细究起来很少有人能论证这个观点,这一章就用通俗易懂的图解方式来证明神经网络为什么能拟合任意一个函数。

开始介绍之前,有两点需要注意:

  1. 并不是说神经网络可以精确计算任意一个函数f(x),而是说当隐藏层神经元增加时,可以无限逼近f(x),比如对于任何一个输入x,网络的输出g(x)和正确值f(x)的差小于某个阈值,|g(x) - f(x)| < \epsilon
  2. 神经网络拟合的是连续函数,而不是那种不连续、离散、急剧变化的函数。

假设给定一个下图的连续函数,函数形式未知,本章将用图解的方式来证明,一个单隐层的神经网络就可以很好的拟合这个未知函数。

Continue reading