【子豪兄】精讲CS231N斯坦福计算机视觉公开课
计算机视觉发展历史与课程概述
大概讲了一些计算机视觉的运用范围(机器学习、生物、无人机、光学等)。Hubel和Wiesel在1959年发现猫对图像的边缘信息产生反映,每个神经元针对固定区域进行处理。
视觉是分层的。2012年,在ILSVRC比赛中AlexNet获得冠军。挑战:人体姿态估计、三维重建。
李飞飞,女,1976年出生于中国北京,美国国家工程院院士,美国国家医学院院士,美国斯坦福大学首位红杉讲席教授 [9] ,以人为本人工智能研究院(HAI)院长,AI4ALL联合创始人及主席,Twitter公司董事会独立董事 [17] 。
KNN:通俗来说就是判断一个人是不是好人就看他周围的5个人是不是好人。线性分类:用线性边界进行分类。
KNN与线性分类器
手工构建特征(效率低),希望用数据驱动的方法从中学习特征。
KNN(惰性算法):训练的时候用到数据和标签,预测时用到最相似的图片。
CIFAR-10:图像结构32*32*3,训练集5万张图,测试集1万张图,共十类。
曼哈顿距离(L1):将两张图同一个像素点进行相减,最后求和。
KNN过程:先记录下训练数据,求L1距离。改变K值能提高精确度,但K不是越大越好。
L1距离适用于明确的含义,L2距离适用于不明确的含义。
KNN中超参数要调整K值和最好的距离评估指标。
如何设置最好的超参数:最好的是有训练集验证集和测试集;交叉验证,分成几份就是几折交叉验证。
KNN存在的问题:1.无法给出数据的内在含义;2.计算复杂度高,空间复杂性高;3.无法处理样本不平衡问题。算法比较糟糕。
协同过滤问题:采用KNN,给相似客户推荐产品或者用一个电影的打分来预判另一个电影的评分,可达到一定利润效果。
线性分类器:在一维平面是一个点,在二维平面在一根线,在三维平面是一个平面,更高平面中是超平面进行分类。对非线性模型无法进行拟合。
代数解释:分数为对应像素乘以权重再加一个常数。还有可视化解释和几何解释。
线性分类、损失函数与梯度下降
绞验损失函数:错误的值减去正确的值后+1再与0进行比较输出大值。惩罚与正确值相差1以上的值。绞验损失函数取平均就是数据集的损失函数。
同一个损失函数可以对应很多不同的权重。
奥卡姆剃刀原理:越简单越好。
正则化(Regularization):在原来损失函数的基础上加一个正则项。来防止过拟化,使模型更简单。
softmax classifier(Multinomial Logistic Regression):将分数变成了概率,和为1,保留大小。
交叉熵损失函数:来衡量模型,得出损失函数的公式。
优化(Optimization):让损失函数往下滚,即减少损失函数。
神经网络是端到端的,不同与以前的网络,它不需要人工的构建特征。
神经网络与反向传播
激活函数:将线性分类器变成非线性。
Relu:修正线性单元。
非线性激活函数为神经网络带来非线性,否则堆多少层神经元都与单个线性层无异。
多少输出神经元就能分多少个类别。
正则化强度越大,边界越平滑。
反向传播方法:从输出开始每一块求梯度得到局部梯度,局部梯度相乘得到全局梯度,全局梯度表示每计算一次输入值的变化。
sigmoid函数的梯度为本身乘以1-本身。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
雅可比矩阵是一阶偏导数以一定方式排列成的矩阵,其行列式称为雅可比行列式。雅可比矩阵的重要性在于它体现了一个可微方程与给出点的最优线性逼近。
卷积神经网络
卷积神经网络:卷积、下采样(池化)和全连接。
感知器:能对线性分类,不能对非线性分类。
本地计算即为边缘计算。
全连接拉平图像会丢失图像的位置信息,所以要用卷积神经网络,十个分类器输出为十个。
卷积层可以认为是特征的提取,池化层对特征进行后处理一般是使其变小,重复多次,全连接是把不同特征进行融合汇总。
边缘像素进行的卷积次数少于中间像素,可以在边缘进行补0的操作。
输入有多少个通道,卷积核就应该有多少个通道。
卷积:符合卷积核定义的区域经过卷积后得到的值很高。
池化:平移不变性、减少参数量和防止过拟合。
1998年,Yann LeCun发现LeNet,进行手写数字识别。
输出尺寸公式:(N-F)/stride+1,N为输入长宽,F为卷积核尺寸,stride为步长
若使输出和输入保持相同的尺寸要满足:(N+2P-F)/stride +1。
步长为1时:P=(F-1)/2,P为补0的圈数。
一层的参数看卷积核:若卷积核为553,则参数为553+1(bias),然后乘以卷积核个数。
1*1卷积核可以进行降维和升维。
多少个卷积核就能生成多少个feature map。
训练神经网络(1)
Mini-batch:每次喂一小批数据进去,比不上全部数据,会震荡绕弯,但道路是曲折的,前途是光明的。Batch:每次喂全部数据进去,求全局梯度,不震荡。Stochastic:每次喂一个数据进去,求一个数据上的梯度,很振荡。
包括:激活函数的选择、数据预处理、权重初始化、批归一化、密切关注训练过程和超参数优化。
激活函数。sigmoid:挤压函数,可解释性好,可类比神经细胞是否激活。问题:饱和性导致梯度消失、输出都是正值没有零点对称(zigzag path),权重同号、指数运算较消耗运算资源。tanh:与sigmoid函数相似但不存在zigzag path 问题。ReLU:不会饱和,容易计算,收敛较快。问题:初始化不良、学习率太大,存在死激活函数,需要加一个正偏置激活。Leaky ReLU和ELU:改善ReLU存在的问题。
数据预处理(比较耗费时间):需要先进行标准化处理(处理后符合标准正太分布)。白化分为PCA白化、ZCA白化。白化的目的是去除输入数据的冗余信息。假设训练数据是图像,由于图像中相邻像素之间具有很强的相关性,所以用于训练时输入是冗余的;白化的目的就是降低输入的冗余性。
权重初始化:所有权重全部初始化为同一个常数会发生同一层的所有神经元前向推断和反向传播完全相同。(use Xavier/He init)→使输入输出方差接近。
批归一化:强行将输出变为标准正态分布。Batch Norm:Mini-batch中N个图片用同样卷积核卷积得到的第C个feature map。Layer Norm:Mini-batch中第一个图片的全部C通道feature map。Instance Norm:Mini-batch中第一张图片的第C个feature map。Group Norm:Mini-batch中第一张图片的某些通道的feature map。
训练神经网络(2)
内容:梯度下降优化器、学习率调整、梯度校准、正则化(dropout)、监控学习过程、最优超参数搜索、模型评估与集成、迁移学习/微调。
一阶优化算法(只有一阶导数)
传统随机梯度下降在梯度较大的方向上发生振荡,不能通过单纯减小学习率解决;陷入局部最优点、鞍点(在高维空间中更普遍)。
SGD+Momentun:在来回晃荡中能摆脱局部最优点或鞍点,会影响收敛时间。
Nesterov Momentun:比前两种方法更快。
AdaGrad:在梯度较大的方向上加一个惩罚项,避免在这个方向上发生振荡。
RMSProp:在AdaGrad的基础上加一个衰减项。
Adam:综合了第一动量(momentum)和第二动量(AdaGrad/RMSProp)。初始化为0,在训练起始阶段难以预热进行工作状态,应加偏置量使得刚开始训练时两个动量有较高初始值。
学习率代表下山路上迈步子的大小,步子过大就难以下山,步子过小下山很慢。训练初始采用大学习率,后期采用小学习率。
early stopping(早停):到一定点上训练集表现良好而测试集表现很差应及时停掉训练,发生过拟合。
Dropout(防止过拟合):阻断某些神经元。打破特征之间的联合适应性,每个特征都得能独当一面。起到了模型集成得效果。在测试阶段不使用Dropout需要补偿回来。
DropConnect:随机阻断输入值。
超参数选择:校验初始损失函数值。
卷积神经网络工程实践技巧
两个33卷积层的感受野为55,3个33卷积层的感受野77,感受野=卷积核。
用多个小卷积核意味着相同的感受野,更少的参数量和计算量,更多的层数意味着更多的非线性变换。
迁移学习和fine tuning
借助预训练模型,泛化我们自己的数据集。
冻结模型前面层的结构和权重,然后重新初始化分类输出层,我们的数据集有C类就输出化C个神经元,在我们数据集上训练输出层。
循环神经网络
CNN为沿空间维度权值共享,RNN为时间维度权值共享,每个时刻的函数值都相同。
多对一为编码器,一对多为解码器。
LSTM(长短期记忆网络):遗忘门、输入门、输出门和更新门。长期记忆一般只有忘记和增加记忆。第一步选择忘记记忆,第二步选择更新记忆,第三步更新cell中记忆,第四步决定输出。
GRU(门控制单元)