深度学习斯坦福cs231n 课程笔记

前言

对于深度学习,新手我推荐先看UFLDL,不做assignment的话,一两个晚上就可以看完。毕竟卷积、池化啥的并不是什么特别玄的东西。课程简明扼要,一针见血,把最基础、最重要的点都点出来 了。

cs231n这个是一个完整的课程,内容就多了点,虽然说课程是computer vision的,但80%还是深度学习的内容。图像的工作暂时用不上,我就先略过了。

突然发现这两个课程都是斯坦福的,牛校就是牛。


lecture 1

历史课,吹吹水,当作练听力,跳过问题也不大。华裔语速还是慢,后面lecture2别人讲的时候语速快得一下子懵逼了。

貌似是Fei-Fei Li唯一一次出现。不过人家确实是大牛,所以名字还是排在ppt前面。

lecture 2-4

机器学习的复习。当练听力好了。我以前写过一篇博客,可以对照看看:[kaggle实战] Digit Recognizer – 从KNN,LR,SVM,RF到深度学习

  • KNN对比较复杂的图像,增大k应该是有效的。
  • svm这个hinge loss应该看明白吧Li=∑i≠yimax(0,sj?syi+1) 不明白的自己回去复习svm了。
  • 计算拆解到activation gate,back propagation物理解释。以前就觉得是个链式求导没啥特别。

  • 下面这个图不错, mark一下。

这几节课,复习之余,主要还可以gain some image intuition

lecture 5

  • 提醒可以利用pre training好的模型,比如Caffe Model Zoo的。再finetune自己的own data。看了下,貌似都是图像的。估计其他的太domain specific了。毕竟图像问题挺棘手的,目前深度学习确实带来不少突破,其他领域要用深度学习的话,感觉有点玄。

activation functions

以前看keras的文档提到ReLu,还以为很复杂,其实式子很简单,简单就是好啊。

重要的是理解背后的原因

* sigmoid sigmoid各种不好,然后就开始改进了。

TLDR是too long; doesn’t read

Data Preprocessing

UFLDL里面的zca白化啥的。

weight Initialization

  • 就是告诉你一个结论,weight没初始化好的话,会影响后面的training。导致train出来的weight分布很不好。
  • 根据对称性,初始化的时候如果weight不随机那训练出来的weight就都一毛一样了。
  • bias倒是直接0就可以了。

用的时候倒是直接用现成的结论就好。但如果你要搞特殊的activation function,那就得注意初始化的问题了。

relu的除以2

Batch Normalization

刚开始还不太明白跟preprocessing的区别,好像就是分batch做而已。听课听着听着也走神了。

看了assignment才知道,这个是插入在网络中间的layer。

However even if we preprocess the input data, the activations at deeper layers of the network will likely no longer be decorrelated and will no longer have zero mean or unit variance since they are output from earlier layers in the network. Even worse, during the training process the distribution of features at each layer of the network will shift as the weights of each layer are updated.

……

To overcome this problem, [3] proposes to insert batch normalization layers into the network.

总之,是一个有点偏工程实现的优化,貌似还挺有用。2015,挺新的,所以UFLDL没有。

summary



http://lossfunctions.tumblr.com 居然有这个网站,有空可以去看看。loss算是模型直观可视化的一个重要部分。


lecture 6

前几页是复习的,可以mark一下。

貌似因为DL的loss是高度非凸,所以需要下面这些优化。LR啥的没听说过要用adam啥的。估计sgd就很好了。

  • sgd最慢
  • momentum 动量,通俗一点貌似就是惯性的意思?
  • Nesterov Momentum “lookahead” gradient, 就是先用更新后的位置的梯度。代码实现的时候稍微变形了下。

  • adaGrad 梯度大的抑制一下步长。
  • RMSProp优化上面的
  • Adam: momentum + RMSProp

L-BFLS好像是LR用的吧。

L-BFGS does not transfer very well to mini-batch setting.

上代码

# 可以发现用alpha和1-alpha来trade-off两个变量很常见啊。。

# Momentum
v = mu * v - learning_rate * dx
x += v

# Nesterov Momentum
v_prev = v
v = mu * v - learning_rate * dx
x += -mu * v_prev + (1 + mu) * v

# Adagrad
cache += dx ** 2
x += -learning_rate * dx /(np.sqrt(cache) + 1e-7)

# RMSProp
cache = decay_rate * cache + (1 - decay_rate) * dx ** 2
x += -learning_rate * dx /(np.sqrt(cache) + 1e-7)

# Adam
m = beta1*m + (1-beta1)*dx
v = beta2*v + (1-beta2)*(dx**2)
x += - learning_rate * m / (np.sqrt(v) + 1e-7)

Regularization: Dropout

2014,也是挺新的。注意效果是regularization。

  • Forces the network to have a redundant representation。简直就是为图像设计的,因为物体换不同角度,或者只出现局部啥的,并不影响人类识别物体。
  • test的时候可以多次dropout采样求平均。 Monte Carlo approximation: do many forward passes with different dropout masks, average all redictions;或者直接不dropout,那就注意数值要scaling一下,不然值肯定比原来drop的时候偏大啊。一般选不dropout吧,练习里用这种。

lecture 7

  • cnn时候的stride,padding等概念。挺简单,但肯定要弄清楚,调参侠调参肯定碰到。
  • 多层conv之后,一个点能看到的原始图像范围会变大,所以conv有点像在层层抽象特征,从点到线到面的感觉。conv图像上是解释得通,其他领域就不知道了。当然这门课就是图像的。
  • pooling直观上看数据会被降维。当然对于图像,冗余信息很多。看到的max pooling居多,average pooling其实就是图像尺寸的缩放,大图生成缩略图。所以pooling在图像上也是有物理含义的。
  • relu之前在另外地方看到,可以用区分信号、噪声来解释。

最后截个图。smaller filter对计算有利,后面有课程讲到。

lecture 8

图像相关的。先略吧。Fast R-CNN,Faster R-CNN啥的,名字这么屌。YOLO最快,后面有时间直接玩玩这个吧。

lecture 9

告诉你怎么可视化和fool CNN。剩下一些图像的东西。DeepDream啥的。

lecture 10

RNN(Recurrent Neural Networks,不会翻译的就直接用英文吧,貌似有人翻译错了),LSTM(Long short term memory)。也没有很神的东西,就是改变一下网络结构。所以不要害怕。可以看看 min-char-rnn 的代码作为切入点。

RNN

其实就是多加上h(t-1)这玩意,activation function用的是tanh,不知为毛。

RNN有多种结构,最简单是Vanilla RNN。assignment就用这种。

Image Captioning 这个例子挺有意思的,就是通过CNN提取图像特征h0给RNN,然后RNN的输入就是一串word id,中间传递的h(t)就是夹杂图像feature和word id的东西。很难想象这样居然work。细节自己做assignment吧。

LSTM

感觉讲得不怎么好,不如看这篇http://colah.github.io/posts/2015-08-Understanding-LSTMs/, 现在google LSTM,这篇已经排第一了,果然群众的眼睛是雪亮的。

lecture 12

  • 学习caffe、theano、lasagne、keras等的读音。
  • 每个库的pros / cons总结。不过最好还是得自己动动手,才能加深理解。先简单过一遍把,实践过后再来仔细看看第二遍,有些事情你没经历过不会明白的。


Assignment

年纪大了,挑了一些做,没完全做完。

assignment 1

年纪大了,原本不想做。但是得熟悉一下numpy,不然后面assignment的有点吃力。熟悉octave的话,也不会太吃力。

  • knn让你感受一下vectorized方式代码速度快多少。因为可以底层代码可以针对矩阵计算专门优化。
  • linear_svm的vectorized实现费了不少脑子。直接从naive实现去推,或者自己画了个矩阵的示意图推吧,一步步来也不难,空想有点绕的。Hinge loss 是一个凸函数,不过它有些点不可微的,只是有subgradient。之前学svm都是用对偶、smo啥的来解,为什么?(这里有篇Quora大概意思就是说能方便使用kernel,处理原始线性不可分的情况,优化的参数少了,跟数据维度无关了)。 sgd并不stable,多跑几次结果可能不一样。这里已经开始灌输调参侠的思想了,挺好。
  • linear_classifiers random choice的时候忘记X和y要用同一个采样下标啊。坑爹。
  • softmax的score居然不用exp再normalize,害我查半天。现在脑子转得快,直接用vectorized方式实现了。naive方式反而觉得得翻译回去,年纪大就不写了,代码里直接调用vectorized方式的。
  • two_layer_net 调参调参
  • features 图像相关,HOG和color histogram都帮你写好了。其他领域看看提取特征方面有没可以借鉴的,color histogram就是一种统计特征。HOG看上去也是统计类的特征,统计各方向的梯度得到边缘,没细看,大概是这样吧。HOG=Histogram of oriented gradient,哦,最后才反应过来看英文全称就好。

注意除法的时候,int可能需要转成float。忘记在哪碰到过了。

assignment 2

虽然看内容没啥意思,原本也不想做。但其实是帮你熟悉modular approach,对后面看caffe、torch等源码还是有帮助的。assignment设计得还是很高明啊。relu虽然可以看做layer上的activation function,但实现的时候用layer是更方便的。之前看keras例子的时候就有点困惑,不知道为啥layer跟activation function怎么要混到一起。因为之前在UFLDL里FC+sigmoid是当作一个layer。

notebook里面帮你写好“单元测试”了,挺好的,这样每一步都有checkpoint知道自己对了没。

numpy默认是传引用,记得用xx.copy()方法返回深拷贝。

assignment 3

传送一个tanh导数

  • rnn_layers.py h(t)在BP的时候除了自己节点输出,t+1节点也有gradient传递过来的。说多了都是泪,查半天。

小结

基本把课程学完了,感觉课程设计得相当赞,内容也很新。把相应的知识都整理到一起,免得自己零零散散地找论文、找资料,还是推荐大家都系统地学一下比较好。课程的Materials也很棒,不要忘记看。编程的assignment就更不用说了,老老实实做下去确实能学到不少东西,加深课程的理解。讲师karpathy我挺喜欢的,可以上他的博客去看看 http://karpathy.github.io/。深度学习还有另外一门cs224d,是关于nlp的 ,感觉现在深度学习就是图像和nlp比较合适。公司现在为了DL而DL,我也不知能搞出什么东西。

时间: 2024-10-14 01:06:21

深度学习斯坦福cs231n 课程笔记的相关文章

CS231n课程笔记翻译

CS231n课程笔记翻译:图像分类笔记(上) - 智能单元 - 知乎专栏 https://zhuanlan.zhihu.com/p/20894041 CS231n课程笔记翻译:图像分类笔记(下) - 智能单元 - 知乎专栏 https://zhuanlan.zhihu.com/p/20900216 CS231n课程笔记翻译:线性分类笔记(上) - 智能单元 - 知乎专栏 https://zhuanlan.zhihu.com/p/20918580?refer=intelligentunit

深度学习UFLDL老教程笔记1 稀疏自编码器Ⅱ

稀疏自编码器的学习结构: 稀疏自编码器Ⅰ: 神经网络 反向传导算法 梯度检验与高级优化 稀疏自编码器Ⅱ: 自编码算法与稀疏性 可视化自编码器训练结果 Exercise: Sparse Autoencoder 自编码算法与稀疏性 已经讨论了神经网络在有监督学习中的应用,其中训练样本是有类别标签的(x_i,y_i). 自编码神经网络是一种无监督学习算法,它使用了反向传播算法,并让目标值等于输入值x_i = y_i . 下图是一个自编码神经网络的示例. 一次autoencoder学习,结构三层:输入层

斯坦福机器学习课程笔记

模型(如何模拟)---策略(风险函数)--算法(最优化方法) 第一节: 机器学习的基本概念和分类 第二节: 线性回归,最小二乘 批梯度下降(bgd)和随机梯度下降(sgd) 第三节: 过拟合,欠拟合 非参数学习算法:局部加权回归 概率角度解释线性回归.极大似然估计(mlp) 分类:逻辑回归

深度学习-最优化笔记

作者:杜客链接:https://zhuanlan.zhihu.com/p/21360434来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 译者注:本文智能单元首发,译自斯坦福CS231n课程笔记Optimization Note,课程教师Andrej Karpathy授权翻译.本篇教程由杜客翻译完成,堃堃和李艺颖进行校对修改.译文含公式和代码,建议PC端阅读. 原文如下 内容列表: 简介 损失函数可视化 最优化 策略#1:随机搜索 策略#2:随机局部搜索 策略#3

转:深度学习课程及深度学习公开课资源整理

http://www.52nlp.cn/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E8%AF%BE%E7%A8%8B%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%85%AC%E5%BC%80%E8%AF%BE%E8%B5%84%E6%BA%90%E6%95%B4%E7%90%86 这里整理一批深度学习课程或者深度学习相关公开课的资源,持续更新,仅供参考. 1. Andrew Ng (吴恩达) 深度学习专项课程 by Courser

李飞飞、吴恩达、Bengio等人的15大顶级深度学习课程

目前,深度学习和深度强化学习已经在实践中得到了广泛的运用.资源型博客sky2learn整理了15个深度学习和深入强化学习相关的在线课程,其中包括它们在自然语言处理(NLP),计算机视觉和控制系统中的应用教程. 这些课程涵盖了神经网络,卷积神经网络,循环网络和其变体,训练深度网络的困难,无监督表示学习,深度信念网络,深玻尔兹曼机器,深度Q学习,价值函数估计和优化以及蒙特卡洛树搜索等多种算法的基础知识. 吴恩达:深度学习专项 这系列课程侧重于讲解深度学习的基础和在不同领域的运用方式,如医疗健康,自动

机器学习001 deeplearning.ai 深度学习课程 Neural Networks and Deep Learning 第一周总结

Deep Learning Specialization 吴恩达老师最近在coursera上联合deeplearning.ai 推出了有关深度学习的一系列课程,相对于之前的machine learning课程,这次的课程更加实用,作业语言也有matlab改为了python从而更加贴合目前的趋势.在此将对这个系列课程做一个学习笔记. 而这次的Deep Learning Specialization分为五门课程,分别为:Neural Networks and Deep Learning,Improv

MXNet设计笔记之:深度学习的编程模式比较

市面上流行着各式各样的深度学习库,它们风格各异.那么这些函数库的风格在系统优化和用户体验方面又有哪些优势和缺陷呢?本文旨在于比较它们在编程模式方面的差异,讨论这些模式的基本优劣势,以及我们从中可以学到什么经验. 我们主要关注编程模式本身,而不是其具体实现.因此,本文并不是一篇关于深度学习库相互比较的文章.相反,我们根据它们所提供的接口,将这些函数库分为几大类,然后讨论各类形式的接口将会对深度学习编程的性能和灵活性产生什么影响.本文的讨论可能不只针对于深度学习,但我们会采用深度学习的例子来分析和优

TensorFlow实现基于深度学习的图像补全

目录 ■ 简介 ■ 第一步:将图像理解为一个概率分布的样本 你是怎样补全缺失信息的呢? 但是怎样着手统计呢?这些都是图像啊. 那么我们怎样补全图像?  ■ 第二步:快速生成假图像 在未知概率分布情况下,学习生成新样本 [ML-Heavy] 生成对抗网络(Generative Adversarial Net, GAN) 的架构 使用G(z)生成伪图像 [ML-Heavy] 训练DCGAN 现有的GAN和DCGAN实现 [ML-Heavy] 在Tensorflow上构建DCGANs 在图片集上跑DC