Recurrent Neural Networks(RNN)
人类是依靠自己过往的经验来学习,如同我们在读文章时,每一时刻,我们对于当前的概念的理解总要添加上对于之前获取的知识经验,总之,我们的思维是有持续性的。
传统的神经网络模型无法做到这一点,而这也是它的主要缺陷之一。
循环神经网络解决了这个难题,所谓循环,简单来说其结构允许信息在网络内留存,也即是,网络是有记忆的。
Google Rephil是Google AdSense背后广告相关性计算的头号秘密武器。但是这个系统没有发表过论文。只是其作者(博士Uri Lerner和工程师Mike Yar)在2002年在湾区举办的几次小规模交流中简要介绍过。所以Kevin Murphy把这些内容写进了他的书《Machine Learning: a Probabilitic Perspecitve》里。在吴军博士的《数学之美》里也提到了Rephil。
Rephil的模型是一个全新的模型,更像一个神经元网络。这个网络的学习过程从Web scale的文本数据中归纳海量的语义——比如“apple”这个词有多个意思:一个公司的名字、一种水果、以及其他。当一个网页里包含”apple”, “stock”, “ipad”等词汇的时候,Rephil可以告诉我们这个网页是关于apple这个公司的,而不是水果。
这个功能按说pLSA和LDA也都能实现。为什么需要一个全新的模型呢? 从2007年至今,国内外很多团队都尝试过并行化pLSA和LDA。心灵手巧的工程师们,成功的开发出能学习数万甚至上十万语义(latent topics)的训练系统。但是不管大家用什么训练数据,都会发现,得到的大部分语义(相关的词的聚类)都是非常类似,或者说“重复”的。如果做一个“去重”处理,几万甚至十万的语义,就只剩下几百几千了。
这是怎么回事?
本文主要根据Multi-layer Recurrent Neural Networks (LSTM, GRU, RNN) for character-level language models in Torch的内容来进行试验。
#准备工作
根据原文“This code is written in Lua and requires Torch. Additionally, you need to install the nngraph and optim packages using LuaRocks”,安装以下依赖。
面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。
面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。
而面向对象的程序设计把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息,并处理这些消息,计算机程序的执行就是一系列消息在各个对象之间传递。
在Python中,所有数据类型都可以视为对象,当然也可以自定义对象。自定义的对象数据类型就是面向对象中的类(Class)的概念。
前几天看到一个不错的方法,现在分享给大家,希望有帮助
比如我看到Nmap的资源很想把他全部下载到本地怎么办呐?右键一个个点?用工具镜像整个站点?
以前我用的方法是左边打开浏览器,右边打开Notepad++ 一个个链接拖到Notepad++里,最后就有了一个完整的下载列表
现在有更好的方法,利用Linux的文本处理工具提取完整的下载链接,文本处理工具我很早就学过了,但是平常不用,学了就忘