0%

信息熵,Information entropy

熵的概念最早起源于物理学,用于度量一个热力学系统的无序程度。1948年,克劳德·爱尔伍德·香农将热力学中的熵引入信息论,所以信息熵也被称为香农熵 (Shannon entropy),用来度量信息量的大小。

信息量

       信息(Information)是一个很抽象的概念,其定义不统一,这里简单认为信息描述了一个或多个事件。那么不严谨地说,一条信息描述的事件越多么,其信息量越大;再进一步说,当信息描述的事件发生的可能性越小时,其信息量越大。这个原理比较复杂,不过可以从直觉上进行简单的解释,因为在一个事件系统中,当一个可能性很小的事件发生时,其一般都产生于多个前提条件,因此描述了该事件的信息也可以认为携带了其前提条件的信息,因此信息量较大。举例来说,在当前时空下,有两条信息分别描述了事件A:“中国队获得2022年世界杯冠军。”和事件B:“德国队获得2022年世界杯冠军。”,显然(?)事件A的可能性很小,那么这条信息就包含了中国队经过换教练、换主力队员,国内足球运动改革等等举措以及天大的运气最终获得冠军。而描述事件B的信息就简单的多,常规操作就可以。

阅读全文 »

  在word2vec教程的第2部分(第一部分链接)中,我将介绍对基本Skip-gram模型的一些其他修改,这些修改对训练可行性非常重要。

  当你阅读有关Word2Vec中的skip-gram模型的教程时,可能会意识到一些问题——它是一个巨大的神经网络!

  在我给出的示例中,我们有包含300个成分的单词向量和10,000个单词的词汇。回想一下,神经网络有两个权重矩阵——隐藏层的权重矩阵和输出层的权重矩阵,每个矩阵的权重数量为三百万!在较大的神经网络上运行梯度下降会很慢,更糟的是,您需要大量的训练数据才足以训练这么多的权重并避免过拟合,数百万的权重乘以数十亿的训练样本意味着训练这种模型十分困难。

  Word2Vec的作者在第二篇论文中通过以下两项创新解决了这些问题:

  1. 对频繁的单词进行二次采样以减少训练示例的数量。
  2. 他们使用称为“负采样”的技术来修改优化目标,该技术可使每个训练样本仅更新模型权重的一小部分。

  值得注意的是,对频繁出现的单词进行二次采样和应用负采样不仅减轻了训练过程的计算负担,而且还改善了其产生的单词向量的质量。

阅读全文 »

最近在看CS224N,本文是第一周的阅读任务之一(原文链接),以下是全文翻译。

  该教程讲解了Word2Vec中的Skip-Gram神经网络结构,教程的目标是深入讲解细节。

模型

  Skip-Gram神经网络模型的基本形式非常简单,如果从细节上的调整和优化开始解释则会显得有些混乱。

  我们先从一个整体的视角去考虑,Word2Vec使用了机器学习中比较常见的的一个技巧,一般来说我们训练一个具有单个隐藏层的简单神经网络来执行特定任务,但是在训练出模型后并不会使用该神经网络来执行该任务,我们要的只是神经网络中隐藏层的权重——这些权重实际上就是我们想要得到的“词向量”。

  在无监督的特征学习中我们也见过该技巧,即训练自动编码器在隐藏层中压缩输入向量,然后将其解压缩回输出层中的原始向量。训练它之后,可以剥离输出层(解压步骤),而仅使用隐藏层-这是学习良好图像特征而无需标记训练数据的技巧。

阅读全文 »

部署网站与Github Pages服务

部署网站

       在前一篇博文个人博客建站实录1:Hexo的安装与配置中构建好的Hexo项目还是一个只能在本地访问的网站,本质上来说只是生成了一些网页文件,如果想要成为一个供别人访问的博客站点,就需要将网站部署到服务器上。所谓的部署网站简单来说就是指把网站的资源(包括网页、图片等文件)放在服务器上,这样所有人只要通过互联网就可以访问到我们的博客站点了。可以看出来,最简单的部署办法就是购买服务器(或者云服务器),那么就只需要将生成好的文件上传到服务器。这种方法虽然简单,但是要钱,其实还是有一些免费的方法的,只是实现起来有些复杂,但是没关系,贫穷催人勤奋,我还是用免费的方法把。

Github Pages服务

       代码托管平台Github就提供了这样一项免费服务——Github Pages,能够满足我们的静态页面建站需求,简单来说就是Github允许我们吧生成的站点文件放在它的服务器上并提供相应的网址,这个功能正好适用于建设博客网站。使用Github Pages服务的方式非常简单。首先在Github上新建一个项目,项目名称为username.github.io,其中username为自己在Github上的用户名。

个人博客站与Hexo

为什么选择个人博客站

       个人建站确实有一些缺点,比如要花一些不必要的时间在站点的建设上,以及功能上会有一定的限制等。但是最终还是选择了尝试个人建站,是因为有一些不可忽视的优点:一是资源管理形式上的自由和统一,所有的博文都自然地以文件形式保存,不用担心以后的迁移问题;二是版权问题,如果在博客平台上写,无法保证平台不会滥用,与其发生版权纠纷后再去扯皮,还不如从一开始就避免这种可能;最后一点也算是强行优点,作为技术人员,花时间在这种“技术周边”上应该不亏吧。

如何将博文转换为网页

       博客大部分的功能其实都是静态网页,能够做到把我们写的文章在浏览器上显示就可以了,交互上的需求还是比较弱的,所以从理论上来说,我们可以自己写前端代码,把每一篇博文的内容排好版,再做一些链接,然后把这一堆静态的HTML文件放在服务器上就能够实现个人建站的需求了。

       但是!重复造轮子是不可取的,除非专职前端方向,否则手撸一个个人博客的框架是很不明智也很浪费时间的,所以我们就需要一个这样的框架,能够让我们专注于写博文本身,至于把文章转换为静态的网页文件,甚至是部署到服务器上这些工作,就让框架去完成吧。Hexo就是这样一个框架:

Hexo 是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页。

       也就是说,我们只要把文章写成Markdown格式的文件,Hexo就能够生成我们的博客站网页。如果把这些网页放到服务器上,就能实现从互联网访问我们的博客的功能了。当然除此之外,Hexo也有其他功能,如部署、插件等,但是one step at a time,先尝试一下Hexo的基本功能吧。

阅读全文 »

线程安全

    给“线程安全”下一个严谨且可操作的定义:当多个线程同时访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果。

Java代码与JVM实现线程安全

    在编写Java代码时,有一些不同的方法保证线程安全,这些方法背后的JVM实现也是不同的。

阅读全文 »

  • JVM的垃圾收集器(Garbage Collector)管理的是Java堆方法区的垃圾回收。
  • GC需要完成三件事:哪些内存需要回收(即判定垃圾)?什么时候回收?如何回收(垃圾收集算法)?
阅读全文 »

基本数据模型

    在HashMap的实现中,最基本的数据模型有两个,分别是用来表示一个键值对的类Node<K, V>和用于保存所有键值对的数组transient Node<K,V>[] table;Node<K, V>的部分定义如下:

1
2
3
4
5
6
7
8
static class Node<K,V> implements Map.Entry<K,V> {
final int hash;
final K key;
V value;
Node<K,V> next;

// methods
}
阅读全文 »