Julia + Flux.jl:从 MNIST 开始

Keywords: #julia #machine learning

这篇博客可能是一系列博客的第一篇。

三月中旬时,我突发奇想想参加 GSoC,并且选定了 Julia 语言下属 Flux.jl 组织里的一个小项目。但问题在于,我此前对 Julia 语言只有耳闻,而从未实际学习过 —— 留给我的时间并不宽裕,GSoC 申请截止到四月十四日。我在这不到一个月的短暂时间内学习了 Julia 语言的基本用法,使用 Flux.jl 做了一些有趣的小实验(本篇博客所记录的就是其中之一),还给 Flux.jl 贡献了一个 Pull request。这样的结果让我颇为满意。

Julia 语言是一门专为科学计算设计的高性能的动态类型语言,Flux.jl 则是使用纯 Julia 语言编写出的机器学习框架。Julia 语言最吸引我的地方就在于,它切实地解决了很多痛点需求:

  • 专为科学计算设计:从数字类型系统的设计,到诸如 $\LaTeX$ 变量名(x\hat => )和复合函数(f ∘ g)这些语法糖,都可以感受到这门语言对科学家群体释放出的友好信号。
  • 高性能:Julia 是一种编译型语言,这为它带来了极高的性能。也正是因此,Flux.jl 这种基于 Julia 的机器学习框架无需像 PyTorchTensorFlow 等一样,依靠 C++ 这种第三方静态编译语言来提高性能。
  • 动态类型:尽管是一门编译型语言,Julia 同时也是一门动态类型语言 —— 我相信这对数据科学家来说是至关重要的(参见 Exploratory Data Analysis)。尽管前有 goplus 这种项目和「有追求的科学家都用 Rust1」这种暴论,但我私以为 Go 和 Rust 静态类型的本质仍阻止了其在数据科学领域的广泛应用(其他科学计算的子领域我几无了解,因此不予评论)。在分析数据时,我们最不想关心的事情就是与编译器的类型系统搏斗,而导致思路频频被打断。此外,Julia 语言生态圈还有 IJuliaPluto.jl 这类项目为 EDA 提供了良好的支持。

本文将展示如何使用 Julia + Flux.jl 来解决机器学习界的 Hello World 问题 —— 识别 MNIST 手写数字!

打造你独享的 RSS 阅读环境 —— RSSHub 与 Miniflux 自建指南

Keywords: #rss

自从我明确意识到推荐算法的危害1以来,我就一直以以 RSS 订阅作为我的主要信息来源。推荐算法所做的事就是不断地将你想要接收的信息反哺给你,导致你对世界的感知被扭曲,直到你陷入消费主义的囚笼。而 RSS 是一种能帮助你主动获取信息的工具 —— 掌握权在你,而非在推荐系统。此外,RSS 与独立网站一起也是对抗网络审查的天作之合。

长期以来我使用 Feedly 订阅 RSS,并辅以 RSSHub 来订阅一些不支持 RSS 的网站。但我最近遇到了以下问题:

  • RSSHub 的免费官方实例用户较多,许多路由因遭到了目标站点反爬虫措施的反制而无法使用;
  • 对于一些小众冷门的 Feed,Feedly 更新经常有延迟,有时甚至还会出现缺漏;
  • 随着我订阅的 Feed 逐渐增多,其数量接近了 Feedly 免费用户能订阅的数量上限 —— 但 Feedly 每月订阅费用过于高昂;

为了解决上述问题,我决定自建 RSSHub,并使用 Miniflux 代替 Feedly。本文就将介绍我自建 RSSHub 与 Miniflux 的过程,以供参考。

从 HomeBrew 迁移到 MacPorts

Keywords: #macOS

在听取了一些朋友的建议后,我决定使用 MacPorts 代替 Homebrew 作为 macOS 上的包管理器。这篇博客记录了我迁移的原因、过程和结果。

国产操作系统调研报告

Keywords: #comment #operating system

本文源自笔者的一次调研报告作业,稍加修改后公布于此博客。

操作系统(Operating System)在计算机体系架构中处于承上启下的关键地位,是沟通底层硬件与上层应用软件之间的桥梁。中国自上个世纪末起就开始了对计算机操作系统国产化的尝试,期间亦历经诸多曲折与起落。本文将尝试从时间维度来梳理国产操作系统产业发展的历程,并在最后提出对未来的一些建议。

Naive Bayes Classifier 简洁教程

Keywords: #bayesian #machine learning

本文将简单的介绍朴素贝叶斯分类器(Naive Bayes Classifier)的数学原理,包括贝叶斯定理、朴素贝叶斯分类器、参数估计、Laplace 校准等。用 numpy 实现 Naive Bayes Classifier 并不困难,各类机器学习框架中大多也已有高可用的实现,因此本文不会再代码细节上多做赘述。

Naive Bayes Classifier 其实相当“朴素”,抛开对“机器学习”这一名词的无端恐惧,你就会发现其本只不过是一些列的概率计算 —— 下面就开始正文。