我到底从UW-CSE341学到了什么

TL;DR 什么也没学到

课程首页

Coursera-课程-A, B, C

介绍当中说,本课程主要内容是FP,并且顺道讨论一下程序语言的设计。

UW官方上面的课程只有Slides和assignments,video不提供。Coursera有video,但是版本比较老,是2013年的。下面的讨论都是基于au20的新版本。

简单来说,前半学期(hw1-hw4)是关于OCaml,一种静态类型的FP。后半学期(hw5-hw7)是Racket,一种动态语言FP。课程里面80%+(的难度)都在于新的FP编程语言,只包含少数PL的内容。例如HW4中,需要实践一个简单粗暴的tokenizer/parser;HW6实现了一个虚假的编程语言MUPL,这个实现并不需要你解析代码,而是手写解析好的语法树,在上面实现求值、闭包、递归等。

调试与debug也是一个非常蛋疼的问题,尤其是Racket写闭包的时候。。。

学习建议:

  1. OCaml的部分比较简单,7天一个小长假就可以搞定。做为平时的娱乐调剂也可以,周期不会超过一个月。
  2. 如果不想使用OCaml,可以尝试F#。因为都是一个流派的,语法接近 …
more ...

機器學習基石 - PLA算法初步

什么是PLA算法

PLA = Perceptrons Learning Alogrithm

WikiPedia上有一个大概的历史背景介绍。

感知机(英语:Perceptron)是Frank Rosenblatt在1957年就职于Cornell航空实验室(Cornell Aeronautical Laboratory)时所发明的一种人工神经网络。它可以被视为一种最简单形式的前馈式人工神经网络,是一种二元线性分类器。

PLA算法的原理

感知机示意图

对于每种输入值(1 - D),我们计算一个权重。当前神经元的总激发值(a)就等于每种输入值(x)乘以权重(w)之和。

由此我们就可以推导出公式如下。

neuron sum

我们可以为这个“神经元”的激发值设定一个阈值threshold

如果 a > threshold,则判定输入为正例。 如果 a < threshold,则判定输入为负例。 对于 a == threshold的情况,认为是特殊情况,不予考虑。

所以,我们的感知器分类器就可以得到以下式子 …

more ...

CSE351 - Lab 1: Manipulating Bits Using C

今天做了CSE351 - Lab1,深深的感觉国外的计算机教学爆了我校一条街。

以上是前言。


bitAnd & bitOr

德摩根定理的应用

/* 
 * bitAnd - x&y using only ~ and | 
 *   Example: bitAnd(6, 5) = 4
 *   Legal ops: ~ |
 *   Max ops: 8
 *   Rating: 1
 */
int bitAnd(int x, int y) {
  return ~(~x | ~y);
/* 
 * bitOr - x|y using only ~ and & 
 *   Example: bitOr(6, 5) = 7
 *   Legal ops: ~ &
 *   Max ops: 8 …
more ...

CSE 351 - Hardware/Software Interface

开一门公开课,Washington University的Hardware/Software Interface。

传说是很不错的计算机科学公开课。使用深入理解计算机系统做教材,正好是我要读的书,所以顺便听听课。

豆瓣上有人写了推荐,观点是这课虽然不错,但是比较浅。根据我现在的理解来说,确实比较浅,如果有不错的高级语言编程基础(C/C++/Java/Pascal等,脚本就算了),很多东西可以速推。

接下来的一些日志会是这门课的作业、实验和感想。现在先挖个坑。慢慢填上。


课程视频:戳我

课程主页:戳我

more ...