深度学习最基础理论知识总结 (CS231课程总结,持续更新)

2023-11-13

因为有在看CS231学习深度学习的简单知识,所以打算整理成blog,持续更新中。。。

 

一、损失函数loss function

1、SVM:最简单的loss function 

其中为真实label对应的分数,为label j对应的分数,Li为每个样本的分类损失,目的是最大化真实label对应分数。

在初始化时,Li的初始值接近于C-1,其中C为分类的个数,因为所有的分数都接近于0,对应为(C-1)个1相加。

 

所有样本的loss表示为:

2、softmax

 

二、模型正则项

通常为了防止模型过拟合,使得模型在效果和复杂度之间达到平衡,常常引入正则项。不同的正则项都是为了模型简单化,但是对简单的定义各异。

1) L1范式:鼓励稀疏,也就是鼓励权重向量中0的个数,从而使得模型简单化

2) L2范式:鲁棒性更好,控制向量中的整体分布,各个位置的数值均影响模型更好,即各个位置的数值较为平均。

3) dropout:随机将每一层上的一些神经元设为0,常在全连接层使用。训练时间加长,但训练后鲁棒性增强。

4) bach normalization:见下

5) dropconnect:和3不同,不是丢弃神经元,而是丢弃一些权重矩阵

6) stochastic depth:随机丢弃一些层。

 

三、Bach Normalization 

深度学习中,通常为了能让激活函数更好地激活,防止梯度消失或者梯度爆炸 (后面会有解释),需要对特征进行归一化,将特征向量变成均值为0,方差为1的向量

通常在全连接层和卷积层之后使用,每一层保证高斯分布,对向量的每个维度进行归一化。

 

四、正向传播与反向传播

神经网络中最主要的操作就是正向传播与反向传播。

正向传播:值,从输入层开始计算各个层的值,依次向后传播直至输出层;

反向传播:从输出层将损失进行反向传播,传播的是梯度,基于链式法则。

 

五、卷积神经网络 convolutional neural network (CNN)

全连接层:整图input x,经过权重矩阵W,进行矩阵相乘Wx得到输出

 

卷积层:对于一个矩阵x(N*N*depth),使用一个卷积核 (filter) w (F*F*depth),在x上按行向下滚动点乘 (将对应位置上的元素相乘),通常会有滚动的间隔stride,以下图为例,对应卷积操作为:

1) 从第一行开始,在对应位置使用卷积核点乘;

2) 将卷积核向右移动一个stride,得到第二幅图,进行点乘;

3) 一直向右以stride为间隔移动,直至到达最右端。然后从第二行开始继续执行1、2步。

所以在经过一次卷及操作后,输出的尺寸大小为s= (N-F)/stride+1,其中F为卷积核的尺寸,N为原始尺寸,输出的大小为s*s*1。通常每一个卷积层会有k个不同的卷积核,所以得到的输出层尺寸为s*s*k。

处理边角位置:使用zero pad在外围一层填空,或是复制边缘值。  目的:在stride=1时保证输出和原始尺寸相同,减少信息损失 (图片尺寸快速减小),减小边角信息损失。

常用的卷积核大小:3*3,5*5,7*7。使用不同的卷积核,为了使输出尺寸保持不变,zero pad的宽度会随之变化。

对于n个m*m的卷积核,对应的参数个数为(m*m*3+1)*n,其中3为depth的值,通常为RGB三通道;1为偏差项;n通常设置为2的次方(32,64,……)。

 

池化层 pooling layer:不改变深度,只改变尺寸。

max pooling: 使用m*m的filter,stride=m (没有重叠区域,降采样),每一个小块取其中的最大值。

采用max而不是mean的原因:为了表示对应区域的受激程度。

通常的深度网络结构:((CONV-RELU)*N-POOL)*M-(FC-RELU)*K,SOFTMAX

其中RELU为激活函数,下面会讲到。通常

 

六、激活函数activation function

1、sigmoid

其中第二个分段函数是感知机。

存在的问题:

 

  1. 饱和神经元使梯度消失:x很大/很小时,梯度变为0,传递到下游节点,梯度消失;
  2. 非零中心函数:当输入wx+b,x均为正值时,梯度均为正或者均为负,在参数更新时只朝一个方向移动,无法得到理想参数,更新效率低;
  3. exp(-x)的计算代价较高。

 

2、Relu

优点:

 

  1. 不会饱和,避免梯度消失;
  2. 计算成本小;
  3. 收敛速度快;
  4. 更具有生物合理性。

缺点:

 

  1. 非零中心函数;
  2. x<0时会出现梯度消失的问题,dead relu
  3. 不适用较大梯度,参数更新后不再激活,梯度为0。

3、Leaky-Relu

4、PRelu

5、tanh

优点:零中心

缺点:仍有梯度消失问题

6、Maxout

优点:不饱和,no die

缺点:参数数量翻倍

7、ELU

七、数据预处理 data preprocessing

1、zero-centered: x-=np.mean

1) 对所有通道取均值 AlexNet

2) 对每个channel取均值 VGGNet

2、normalized data: x/=np.std(X,axis=0)

 

八、权重初始化 weight initialization

初始化时可能面临的问题:

 

  • 如果将w均初始化为0,则所有神经元都在做相同的事情。
  • 权值设置过小 (0.01),不断传播后数值变得过小
  • 权值设置过大,饱和,梯度变为0

所以常使用Xavier initialization:

np.random.randn(in,out)/np.sqrt(in)或者

np.random.randn(in,out)/np.sqrt(in/2) 解决Relu每次有一般不会被激活的问题 (x<0)。

 

九、babysitting参数监控

 

  1.  如果loss为NaN,说明学习速率设置过大
  2. 如果loss值下降很缓慢,说明学习速率过小
  3. 交叉验证,如果训练集的accuracy不断增加,而测试集不变,说明可能过拟合,需要调整正则化项

 

十、随机梯度下降 stochasitc gradient decent (SGD)

梯度:沿着梯度方向函数值上升最快

梯度更新:计算好当前状态下损失函数在每个参数下的梯度后,再更新每个参数;而不是计算一个参数就更新一个参数,然后再计算一个参数,因为这时第一个参数已经改变。      这里提到的是同步更新的概念。

缺点:

 

  • 在某个方向loss下降很快,某个方向loss下降很慢
  • 局部最小点:如下所示红点位置

 

  • 鞍点:saddle point,一个方向上梯度大于0,一个方向上梯度小于0。在高维数据上容易发生

 

  • stochastic:曲折着走向optimal,耗时。

 

十一、学习率learning rate decay method

1、exponential decay

2、 1/t decay

十二、VGG Net

1) smaller filter:3*3卷积核

    参数量较小,可以使用更多的filters来增加深度

2) same effective field

    使用3层,3*3 C个filters,对应的视野域和7*7的相同,但是参数远远小,3*(3*3*C*C)<(7*7*C*C)。

    effective field:第一层3*3;第二层也是3*3,但其中每个点都对应第一层中的一个3*3区域,按照stride=1滚动,所以第二层中的3*3实际对应了原始中5*5的区域;同理,第三层对应到的实际是7*7的区域。

    所以视野域和直接使用7*7的卷积核是一样的,但是参数变少了,减少了计算负担。

 

 

十三、GoogleNet

无全连接层,含有一个inception layer, 包含了3个conv层和1个pooling层,最终结果将4个输出串联为最终输出,每个conv层,pooling层尺寸相同,深度 (通道数)不同。

但是这种方法,计算量大。解决方案:加入bottleneck层,使用1*1 conv先降低输入深度。

    例如,m*m*256经过1*1 filter后,变成m*m*32,这样再传入conv层能够减少运算。

 

十四、ResNet

Hypothsis: the problem is an optimization problem, deeper models are harder t optimize. 所以并不是越深的网络就一定越好。

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深度学习最基础理论知识总结 (CS231课程总结,持续更新) 的相关文章

  • cherry-pick如何使用?

    多分支开发 然后从测试分支合并到生产分支 测试分支有些内容此次不上线 所以不能全量merge 此时该如何操作呢 这时候就需要使用git cherry pick 下面是阮一峰的教程http www ruanyifeng com blog 20
  • React基础讲解

    文章目录 前言 一 React是什么 二 如何使用 1 基于浏览器的模式 babel 代码如下 2 利用react 创建视图 3 JSX 4 插值表达式 代码示例 5 条件输出 输出数据类型 列表渲染 条件渲染 6 列表循环 基于自动化的集
  • 【C语言编程练习】使用循环,计算1至100的和

    题目 使用循环结构 计算从1加到100的和 题目分析 可以使用for while do while进行设计 1 for循环 使用for循环时 需要注意循环变量的值要从1到100 不要写成了i lt 100导致没加100 2 while循环
  • centos切换到root登录

    具体操作方法 1 在centos系统桌面下通过快捷键 Ctrl Alt T 打开终端命令行模式 2 在centos终端命令行模式下输入以下命令切换到root用户登录 su root 切换到root用户 3 登录过程中如果怎么输入密码都出错

随机推荐

  • glTF模型转3D Tiles

    将 glTF 模型转换为 3D Tiles 格式需要使用一些工具来完成 其中一种方法是使用 Cesium 的 3D Tiles 工具 Cesium 是一个开源的 3D 地球浏览器 它提供了一个命令行工具 可以将 glTF 模型转换为 3D
  • nginx压缩ttf文件 mine.types的作用

    最近在运维过程中 前端提到发现在linux上下载某ttl文件 字体文件 太大 传输过程比较慢 于是就想着使用nginx的gzip进行压缩 经过不断尝试 终于发现在nginx的配置目录 etc nginx mine types 文件中少了 f
  • 如何把C盘Program Files(x86)中的google文件删除

    1 打开任务管理器 杀掉google相关的所有进程 2 参考以下文章更改权限 29条消息 需要来自administrators的权限才能对此文件夹进行更改 欧晨eli的博客 CSDN博客 你需要来自计算机管理员的权限才能对此文件夹进行更改
  • Pytorch Pytorch+深度学习神经网络相关学习收获

    文章目录 一 基础知识 二 Pytorch 三 如何实现一个神经网络 四 pytorch的数据类型 五 常用结构 六 构造神经网络的相关知识 七 数据集处理 一 基础知识 机器学习 本质就是通过 数据 答案的数据集 经过机器学习的训练 得到
  • 第四章 分支结构程序设计(二)

    5 已有预处理命令和定义如下 define N 8 intx 2 z 1 double y 1 2 下述程序段正确的是 C A switch x case z x break case N gt 0 x break B switch x c
  • Anaconda常用命令汇总

    Conda是Anaconda中一个强大的包和环境管理工具 可以在Windows系统中的的Anaconda Prompt命令行使用 也可以在macOS或者Linux系统的终端窗口的命令行使用 本文简单介绍conda的一些常用命令命令 仅供参考
  • 基于ant.design4.3.1实现table的编辑

    以下内容其实是当时不太会的一种无可奈何之举 建议使用实现form table编辑校验新链接的方法更为恰当 实现效果如图所示 import React useState from react import Table Input InputN
  • C#登录的实现(权限)

    只要涉及到软件的使用 最根本的会存在有登录 通过个人唯一的标志性账户登入使用软件 可以存有每个人独有的数据信息 制作一款软件最基础的前端操作页面等一系列模块只是最基础的框架 通过独有账户信息进入可通过后台数据处理显示以及操作个人最高权限的信
  • ESP8266-NodeMCU网络服务器(一)- 数字时钟制作

    文章目录 效果 所需环境 实现步骤 原理 HTML JS代码 上传文件到闪存系统 上传程序 效果 所需环境 ESP8266 NodeMCU 开发板 以下简称NodeMCU ESP8266库 Arduino IDE 代码编写工具 无线 热点
  • 【机器视觉学习笔记】大津法/Otsu最大类间方差法 最佳阈值处理(C++)

    目录 概念 C 源码 OtsuThreshold 主函数 效果 完整源码 平台 Windows 10 20H2 Visual Studio 2015 OpenCV 4 5 3 本文所用源码修改自C opencv 图片二值化最佳阈值确定 大津
  • Objectiv-C学习笔记-XCode模拟命令行填入参数执行

    菜单 Product gt Edit Scheme 左边找到run xxx点击后在右边选择Arguments面板中就可以设置XCode在运行命令行app时模拟输参数 设置完成后再次run就会自动填入设置好的参数了
  • Springboot集成Jedis + Redisson

    以下转载文章经过本人亲测 具有可行性 很好地解决了配置文件分环境部署 以及基本的redissonclient注入问题 转载地址 https my oschina net devonking blog 1421774 本文主要跟大家分享在Sp
  • xlog使用

    对移动开发者来说 最头疼的莫过于线上出现问题 本地无法复现又没有任何日志的场景 但是考虑到应用性能和安全性 无法打印和保存过多的日志 颇有一种书到用时方恨少的感觉 一 xlog介绍 xlog 是腾讯 Mars 终端基础组件中的通用日志模块
  • 003.unity获取输入

    1 键盘输入 获取上下左右方向 h lt 0向左 h gt 0向右 v lt 0向下 v gt 0向上 float h Input GetAxis Horizontal float v Input GetAxis Vertical
  • 如何在MySQL中存储数组(list)?

    解决方法 我在MySQL中有两个表 表Person具有以下列 id name fruits 水果列可以包含空或像 apple orange banana 或 strawberry 等的字符串数组 第二个表是Table Fruit 有以下三列
  • 【915程序设计】22西交大软件专硕915程序设计真题讲解

    27 无人机 include
  • ILRuntime Dotween

    ILRuntime Dotween 1 Unity 主程序导入dotween 2 热跟程序引用dotween dll 在unity 项目中找到dotween dll 文件 我的dotween dll 位置是 E ILRunTime ILRu
  • 中国齿轮行业发展状况与投资规划建议报告2022-2028年

    中国齿轮行业发展状况与投资规划建议报告2022 2028年 详情内容请咨询鸿晟信合研究院 全新修订 2022年2月 撰写单位 鸿晟信合研究研究 报告目录 第1章 齿轮行业发展环境分析 1 1 齿轮行业政策环境分析 1 1 1 齿轮行业相关政
  • js中的数据类型转化

    基本类型的转化 Number null 转换为 0 undefined 转换为 NaN true 转换为 1 false 转换为 0 字符串转换时遵循数字常量规则 转换失败返回NaN String null 转换为 null undefin
  • 深度学习最基础理论知识总结 (CS231课程总结,持续更新)

    因为有在看CS231学习深度学习的简单知识 所以打算整理成blog 持续更新中 一 损失函数loss function 1 SVM 最简单的loss function 其中为真实label对应的分数 为label j对应的分数 Li为每个样