强化学习
监督学习是利用标记了的样本进行学习,无监督学习则是使用未标记的样本进行学习,这两个是我们最常见的。半监督学习则是样本中只有少量带标记的样本,多数样本都未标记,利用这些样本进行学习。强化学习则是很不同的一种学习方式,它没有规则的训练样本和标签,主要通过奖励和惩罚达到学习的目的。 …
从JDK源码看System.exit
在编写的Java程序中有时会遇到用 System.exit 来关闭JVM,其中调用 exit 方法时会包含一个状态参数n,即System.exit(n)。这其实是一个约定值,如果为0则表示正常关闭,而非0则表示非正常关闭。这里我们从JDK源码看下不同状态都是怎么处理的。 先看S…
深度学习的Attention模型
前面看到谷歌发表的运用在机器翻译上的论文《Attention is all you need》,很是让人惊讶,这是一种全新的模型,与之前的经典的seq2seq模型改动较大,它完全摒弃了RNN或CNN神经网络,大大简化了模型的复杂度,而且效果还相当好。当然Attention模型可…
从JDK源码角度看Float
在看Float前需要先了解IEEE 754标准,该标准定义了浮点数的格式还有一些特殊值,它规定了计算机中二进制与十进制浮点数转换的格式及方法。规定了四种表示浮点数值的方法,单精确度(32位)、双精确度(64位)、延伸单精确度(43位以上)与延伸双精确度(79位以上)。多数编程语…
如何用 TensorFlow 训练聊天机器人(附github)
实际工程中很少有直接用深度学习实现端对端的聊天机器人,但这里我们来看看怎么用深度学习的seq2seq模型来实现一个简易的聊天机器人。这篇文章将尝试使用TensorFlow来训练一个基于seq2seq的聊天机器人,实现根据语料库的训练让机器人回答问题。 关于seq2seq的机制原…
Java安全管理器
总的来说,Java安全应该包括两方面的内容,一是Java平台(即是Java运行环境)的安全性;二是Java语言开发的应用程序的安全性。由于我们不是Java本身语言的制定开发者,所以第一个安全性不需要我们考虑。其中第二个安全性是我们重点考虑的问题。 一般我们可以通过安全管理器机制…
隐马尔可夫模型的Viterbi解码算法
前面在做自然语言处理时涉及到一些词性标注的工作,一般会使用隐马尔科夫模型(HMM)来实现词性标注,而HMM模型的解码实现算法一般就会使用Viterbi算法。 HMM模型有多种应用,这里说的是其中一个常见应用,即根据观察序列找到最可能的隐含状态序列。最朴素的想法就是直接穷举所有可…
从JDK源码角度看Long
Java的Long类主要的作用就是对基本类型long进行封装,提供了一些处理long类型的方法,比如long到String类型的转换方法或String类型到long类型的转换方法,当然也包含与其他类型之间的转换方法。除此之外还有一些位相关的操作。 MIN_VALUE静态变量表示…
TensorFlow实现seq2seq
前言 前面在《深度学习的seq2seq模型》文章中已经介绍了seq2seq结构及其原理,接下去这篇文章将尝试使用TensorFlow来实现一个seq2seq网络结构,该例子能通过训练给定的训练集实现输入某个序列输出某个序列,其中输入序列和输出序列相同,这里选择使用LSTM模型。 …
volatile足以保证数据同步吗
在讨论之前必须先搞清四种存储介质:寄存器、高级缓存、RAM和ROM。 RAM与ROM大家都比较熟悉了,可以看成是我们经常说的内存与硬盘,寄存器属于处理器里面的一部分,而高级缓存cache是CPU设计者为提高性能引入的一个缓存,也可以说是属于处理器的一部分。在利用CPU进行运算时必…
深度学习的seq2seq模型
从rnn结构说起 根据输出和输入序列不同数量rnn可以有多种不同的结构,不同结构自然就有不同的引用场合。如下图, one to one 结构,仅仅只是简单的给一个输入得到一个输出,此处并未体现序列的特征,例如图像分类场景。 one to many 结构,给一个输入得到一系列输出,…
从ASCII聊起
在互联网的世界,端与端之间传递的报文都是未经过编码的字节流,每8位组成1个字节,计算机以二进制为基础,这是由于使用晶体管的开合状态表示1和0,这样8个电晶体管就可以组成一个字节,这正是应用层使用的最小单位——字节。 在通过Socket进行网络通信的程序中,假如我们在接收到报文时不…
TensorFlow构建循环神经网络
前言 前面在《循环神经网络》文章中已经介绍了深度学习的循环神经网络模型及其原理,接下去这篇文章将尝试使用TensorFlow来实现一个循环神经网络,该例子能通过训练给定的语料生成模型并实现对字符的预测。这里选择使用最原始的循环神经网络RNN模型。 语料库的准备 这里就简单用纪伯伦…
如何用TensorFlow训练词向量
前言 前面在《谈谈谷歌word2vec的原理》文章中已经把word2vec的来龙去脉说得很清楚了,接下去这篇文章将尝试根据word2vec的原理并使用TensorFlow来训练词向量,这里选择使用skip-gram模型。 语料库的准备 这里仅仅收集了网上关于房产新闻的文章,并且将…
谈谈Tomcat内核
这里写图片描述 这里写图片描述 这里写图片描述 这里写图片描述 这里写图片描述 这里写图片描述 这里写图片描述 这里写图片描述 这里写图片描述 这里写图片描述 这里写图片描述 这里写图片描述 这里写图片描述 这里写图片描述 这里写图片描述 这里写图片描述 这里写图片描述 这里写图…
GRU神经网络
前面已经详细讲了LSTM神经网络(文末有链接回去),接着往下讲讲LSTM的一个很流行的变体。 GRU是什么 GRU即Gated Recurrent Unit。前面说到为了克服RNN无法很好处理远距离依赖而提出了LSTM,而GRU则是LSTM的一个变体,当然LSTM还有有很多其他的…
从JDK源码角度看Integer
概况 Java的Integer类主要的作用就是对基本类型int进行封装,提供了一些处理int类型的方法,比如int到String类型的转换方法或String类型到int类型的转换方法,当然也包含与其他类型之间的转换方法。除此之外还有一些位相关的操作。 继承结构 --java.la…
谈谈谷歌word2vec的原理
word2vec 在NLP领域中,为了能表示人类的语言符号,一般会把这些符号转成一种数学向量形式以方便处理,我们把语言单词嵌入到向量空间中就叫词嵌入(word embedding)。谷歌开源的word2vec则是这么一种词嵌入工具,它能生成词向量,通过词向量可以很好地度量词与词之…
从JDK源码角度看并发的原子性如何保证
JDK源码中,在研究AQS框架时,会发现很多地方都使用了CAS操作,在并发实现中CAS操作必须具备原子性,而且是硬件级别的原子性,Java被隔离在硬件之上,明显力不从心,这时为了能直接操作操作系统层面,肯定要通过用C++编写的native本地方法来扩展实现。JDK提供了一个类来满…
LSTM神经网络
LSTM是什么 LSTM即Long Short Memory Network,长短时记忆网络。它其实是属于RNN的一种变种,可以说它是为了克服RNN无法很好处理远距离依赖而提出的。 我们说RNN不能处理距离较远的序列是因为训练时很有可能会出现梯度消失,即通过下面的公式训练时很可能…