机器学习以及计算机公开课汇总帖
之前在简书上发过两个帖子,分别总结了CS以及机器学习的课程资源,现在也学习了几个月,就把学完的记录在这里,部分课程做了笔记的也会列出。
系统自学计算机课程:
https://www.jianshu.com/p/8f2646a825e8
机器学习资料:
https://www.jianshu.com/p/dc9020fd03b1
计算机计算机基础
哈佛大学 CS50
https://www.edx.org/course/cs50s-introduction-computer-science-harvardx-cs50x
如果0基础想要学习计算机知识,非常推荐这门课,课程生动有趣。这门课面非常广,介绍了C语言,SQL,HTML,Python以及Javascript,如果时间有限,可以着重学习C语言部分。
Nand to Tetris
https://www.coursera.org/learn/build-a-computer
https://www.coursera.org/learn/nand2tetris2
https://www.nand2tetris.org/
非常非常好的课 ...
未完成的课程汇总
由于时间或者个人原因,在学习的过程中难免有没有学习完的课程,这里会将其列出,方便后续填坑。
未完成列表
MIT 6.172(完成4讲)
MIT 概率课程
台交大信息论(完成10讲)
台交大随机过程(完成6讲)
Information Theory, Inference and Learning Algorithms(完成8讲)
MIT 18.605 Matrix Methods in Data Analysis, Signal Processing, and Machine Learning(上传6讲,完成到21讲)
CS236 Deep Generative Models(完成8讲)
CS234 强化学习(完成1讲)
EE364 凸优化(完成8讲)
Deep Learning for Human Language Processing (完成语音部分)
斯坦福算法专项课程(完成9周内容)
博客主题配置
记录博客主题的配置以及相关优化。
博客内容整理
记录对博客内容整理的过程。
23年终总结
有半年没发博客了,最近实在太忙,之前的公开课学习也基本都搁置,马上24年了,希望有个新气象,这里先跟风写个总结,本文也发于知乎,以下为原文:
跟风写个年终总结吧,之前所有的博客都是写在自己的博客网站上,马上新的一年了,尝试一下知乎上写写。其实最近半年多已经没有更新过博客了,原因是各种事情导致太忙,实在没啥时间学习公开课,所以也一直停滞了。
发生的事情细想一下,今年真的发生了很多事:1月孩子出生;2到4月换工作,面了几十次,同期也和合作者开发了HGRN;5月去新公司;6月对Linear Transformer结构做升级改进,加起来的ablation前后得有几百个;7月对Linear Transformer做加速,也学了triton,这期间经历过无数次3,4点睡觉;8,9月训练,测评Transnormer-LLM 7B,中间真是踩了无数的坑;10月之后做TransnormerLLM的开源,sft等工作;11月到12月初对我们之前的工作做了一些总结,测评1B, 3B level相比于Llama结构的效果,也同步测评了Mamba,具体见链接;12月之后也启动了15B模型的训练,整个过程(包括 ...
Deep Learning Systems Lecture 24 Model Deployment
这里回顾dlsys第二十四讲,本讲内容是模型部署。
课程主页:
https://dlsyscourse.org/
https://forum.dlsyscourse.org/
https://mugrade-online.dlsyscourse.org/
大纲
模型部署概述;
机器学习编译;
模型部署概述到目前为止我们在这门课上学到了什么
如何构建深度学习系统,在标准计算环境(使用 GPU)上高效地训练深度学习模型;
自动微分;
深度模型;
硬件加速和扩展;
规范化、初始化、优化;
模型部署将学习到的模型部署不同的应用环境:
模型部署注意事项
应用环境可能会带来限制(模型大小,no-python);
利用本地硬件加速(移动GPU、加速 CPU 指令、NPU)与应用程序集成(数据预处理、后处理);
模型导出并部署到推理引擎
推理引擎内部
许多推理引擎被构造为计算图解释器;
为中间激活分配内存,遍历图并执行每个运算符;
通常只支持一组有限的运算符和编程模型(例如动态);
机器学习编译库驱动的推理引擎部署的局限性需要为每个硬件后端构建专门的库,大量的工程优化工作。
机器学习编 ...
Deep Learning Systems Lecture 22 Implicit Layers
这里回顾dlsys第二十二讲,本讲内容是Implicit Layers。
课程主页:
https://dlsyscourse.org/
https://forum.dlsyscourse.org/
https://mugrade-online.dlsyscourse.org/
大纲
复杂函数作为深度网络中的层(运算符);
implicit layer的微分;
implicit layer的例子;
复杂函数作为深度网络中的层(运算符)深层网络中的“层”术语“层”在深度学习中是一个重载。我们需要区分两件事:
Operators在计算图中定义“原子”操作,以及它的显式梯度传递:即矩阵乘法、卷积、逐元素的非线性等。
Modules定义了运算符的集合,其中反向传递是通过计算图的构造隐式创建的。
将函数定义为运算符而不是模块有什么好处?
例子:卷积回想一下我们之前的讲座,卷积可以根据许多矩阵乘法运算来指定:
def conv_matrix_mult(Z, weight):
N,H,W,C_in = 2.shape
K,_,_,C_out = weight.shape
...
Deep Learning Systems Lecture 20 Transformers and Attention
这里回顾dlsys第二十讲,本讲内容是Transformer和Attention。
课程主页:
https://dlsyscourse.org/
https://forum.dlsyscourse.org/
https://mugrade-online.dlsyscourse.org/
大纲
时间序列建模的两种方法;
Self-attention和Transformer;
超越时间序列的变形金刚;
时间序列建模的两种方法时间序列预测让我们回顾一下之前课程中的基本时间序列预测任务:
更根本的是,时间序列预测任务可以写成如下预测任务:
y_{1: T}=f_\theta\left(x_{1: T}\right)其中$y_t$只能依赖于$x_{1:t}$。
这样做有多种方法,可能涉及也可能不涉及RNN的隐状态表示。
RNN“隐状态”方法我们已经看到了时间序列的RNN方法:保持“隐状态”$h_t$,它总结了到$t$时刻为止的所有信息。
优点:潜在的“无限”历史,紧凑的表示;
缺点:历史和当前时间之间的长“计算路径”⟹消失/爆炸梯度,难以学习;
“直接预测”方法相比之下,也可以 ...
Deep Learning Systems Lecture 18 Sequence Modeling and Recurrent Networks
这里回顾dlsys第十八讲,本讲内容是序列建模和RNN。
课程主页:
https://dlsyscourse.org/
https://forum.dlsyscourse.org/
https://mugrade-online.dlsyscourse.org/
大纲
序列建模;
RNN;
LSTM;
超越“简单”的序列模型;
序列建模序列建模任务在我们目前考虑的示例中,我们假设每个输入输出对$x^{(i)},y^{(i)}$是独立同分布的(i.i.d.)。
在实际中,很多情况下输入/输出对是以特定序列给出的,我们需要使用关于这个序列的信息来帮助我们进行预测:
例子:词性标注给定一个单词序列,确定每个单词的词性:
单词的词性取决于使用它的上下文,而不仅仅是单词本身。
例子:语音to文本给定一个音频信号(假设我们甚至知道词的边界,并将每个片段映射到一个固定大小的向量描述符),确定相应的变换:
同样,单词的上下文非常重要(例如,参见任何试图“wreck a nice beach”的糟糕语音识别系统)。
示例:自回归预测序列预测的一种特殊情况,其中要预测的元素是序列中的下一个元素 ...
Deep Learning Systems Lecture 16 Generative Adversarial Networks
这里回顾dlsys第十六讲,本讲内容是GAN。
课程主页:
https://dlsyscourse.org/
https://forum.dlsyscourse.org/
https://mugrade-online.dlsyscourse.org/
大纲
生成对抗训练;
对抗训练作为深度学习模型中的一个模块;
生成对抗训练从分类器到生成器
分类器目标:预测的类别接近标签。
生成器目标:使生成样本的分布“接近”目标数据分布。
定义分布的“距离”
与监督分类设置不同,“目标”不太明显;
为了建立有效的训练机制,我们需要在生成的数据集和真实的数据集之间定义一个“距离”,并用它来驱动训练;
我们真正想要的是:确保生成的样本“看起来真实”;
通过oracle判别器学习生成器
假设我们有一个oracle判别,可以区分真实数据和虚假数据。然后我们需要训练生成器来“愚弄”oracle判别器。我们需要最大化判别器损失:
\max _G\left\{-\mathrm{E}_{z \sim N o i s e} \log (1-D(G(z))\}\right.学习判别器我们没有oracle判别 ...
Deep Learning Systems Lecture 15 Training Large Models
这里回顾dlsys第十五讲,本讲内容是如何训练大模型。
课程主页:
https://dlsyscourse.org/
https://forum.dlsyscourse.org/
https://mugrade-online.dlsyscourse.org/
大纲
内存节省技术;
并行和分布式训练;
内存节省技术机器学习系统的要素更大的数据集需要更大的模型容量。这反过来又对计算设备提出了要求。机器学习的成功是所有三个要素的结合。 最近的许多进展要求我们将这三者都推向极限。
今天我们将学习两个主题:
如何减少内存消耗,以便我们可以将更大的模型装入单个设备。
如何扩大训练过程。
回顾:GPU内存层次结构
共享内存:每个核64KB;
GPU内存(全局内存):
RTX3080 10GB;
RTX3090 24GB;
A100 40/80GB;
内存消耗的来源
用于训练的典型计算图的简化视图,权重被省略并隐含在梯度步骤中:
内存消耗的来源:
模型权重;
优化器状态;
中间激活值;
仅用于内存节省推理的技术
我们只需要$O(1)$内存来通过循环通过两个缓冲区来计算$N ...
Deep Learning Systems Lecture 12 GPU Acceleration
这里回顾dlsys第十二讲,本讲内容是GPU加速。
课程主页:
https://dlsyscourse.org/
https://forum.dlsyscourse.org/
https://mugrade-online.dlsyscourse.org/
大纲
GPU编程;
案例研究:GPU上的矩阵乘法;
GPU编程GPU vs CPU
GPU和CPU最大的区别在于有很多个核。
GPU编程模式:SIMT
单指令多线程(SIMT);
所有线程执行相同的代码,但可以采用不同的路径;
线程被分组到block中;
同一blocks内的线程共享内存;
blocks被分组到一个启动grid中;
一个内核执行一个grid;
注意:我们将在本讲座中使用CUDA的术语。但通常这些概念在其他gpu编程模型中有对应概念(opencl、sycl、metal)
例子:向量加法void VecAddCPU(float* A, float *B, float* C, int n) {
for (int i = 0; i < n; ++i) {
...