(点击
上方公众号
,可快速关注)
来源:SOTOM数据科学
来自于加州伯克利大学的David Bourgin 使用Numpy实现了几乎全部的机器学习算法,真正实现了手撸ML的愿景。多少“调包侠”的愿望都被这位小哥实现了!
该项目超过3万行代码,除了算法本身,还有很多的数据预处理代码!
地址:https://github.com/ddbourgin/numpy-ml
手撸算法的目的在于能够更好的学习和深入理解算法,而不是要替代已有的框架,毕竟成熟的框架在效率和精准度上都已经得到验证。
我们来看下已经实现的算法:
1. 高斯混合模型
2. 隐马尔可夫模型
3. 隐狄利克雷分配模型(主题模型)
-
用变分 EM 进行 MLE 参数估计的标准模型
-
用 MCMC 进行 MAP 参数估计的平滑模型
4. 神经网络
4.1 层/层级运算
-
Add
-
Flatten
-
Multiply
-
Softmax
-
全连接/Dense
-
稀疏进化连接
-
LSTM
-
Elman 风格的 RNN
-
最大+平均池化
-
点积注意力
-
受限玻尔兹曼机 (w. CD-n training)
-
2D 转置卷积 (w. padding 和 stride)
-
2D 卷积 (w. padding、dilation 和 stride)
-
1D 卷积 (w. padding、dilation、stride 和 causality)
4.2 模块
-
双向 LSTM
-
ResNet 风格的残差块(恒等变换和卷积)
-
WaveNet 风格的残差块(带有扩张因果卷积)
-
Transformer 风格的多头缩放点积注意力
4.3 正则化项
-
Dropout
-
归一化
-
批归一化(时间上和空间上)
-
层归一化(时间上和空间上)
4.4 优化器
-
SGD w/ 动量
-
AdaGrad
-
RMSProp
-
Adam
4.5 学习率调度器
-
常数
-
指数
-
Noam/Transformer
-
Dlib 调度器
4.6 权重初始化器
4.7 损失
-
交叉熵
-
平方差
-
Bernoulli VAE 损失
-
带有梯度惩罚的 Wasserstein 损失
4.8 激活函数
-
ReLU
-
Tanh
-
Affine
-
Sigmoid
-
Leaky ReLU
4.9 模型
-
Bernoulli 变分自编码器
-
带有梯度惩罚的 Wasserstein GAN
4.10 神经网络工具
-
col2im (MATLAB 端口)
-
im2col (MATLAB 端口)
-
conv1D
-
conv2D
-
deconv2D
-
minibatch
5. 基于树的模型
-
决策树 (CART)
-
[Bagging] 随机森林
-
[Boosting] 梯度提升决策树
6. 线性模型
-
岭回归
-
Logistic 回归
-
最小二乘法
-
贝叶斯线性回归 w/共轭先验
7.n 元序列模型
-
最大似然得分
-
Additive/Lidstone 平滑
-
简单 Good-Turing 平滑
8. 强化学习模型
-
使用交叉熵方法的智能体
-
首次访问 on-policy 蒙特卡罗智能体
-
加权增量重要采样蒙特卡罗智能体
-
Expected SARSA 智能体
-
TD-0 Q-learning 智能体
-
Dyna-Q / Dyna-Q+ 优先扫描