就像修炼武功一样,都有武林秘籍,按照步骤一步一步修炼,练好基础,然后再举一反三,最终就可修炼绝世武功。在深度学习领域进行学习的过程中也是一样,先把基础功训练扎实,深入理解原理及步骤,后面不管是各种算法的变种都可以通过基础算法举一反三。今天就来讲解下深度神经网络训练的三部曲,也就是神经网络是怎么训练的。

这里的训练三部曲就分为正向传播、反向传播、梯度下降。

那么我们分开来讲解每一步做了啥以及这样的做的作用是什么。

1.正向传播

首先来深入解析正向传播,正向传播指的就是由输入计算预测值的过程就是正向传播的过程。

但是在这里我们可能很快就会发现,上章讲过神经元必须会做的一个操作就是线性变换和非线性变换这2步,而在看这2步的时候,我们会发现有参数w, b ;那么一开始的时候我们要想得到预测值,就一定会带着这个w,b进去计算才能得到最终的预测值。所以这里我们需要做的就是初始化参数,这也是为啥不管我们在实践中使用哪个神经网络结构的时候都会需要对参数初始化,原因就在于此。既然一开始要对参数人为的进行初始化,那么初始化为何值合适呢,这里我们并不能直接说一定用某个值就一定是万金油,只能够给出个理论指导方向,那就是在初始化的时候,我们的w一般都设置到0的左右,但是不能太大,而b 则一般可以置为0 。通过初始化的w,b 然后就可以得到线性变换后的值,后面还需要对这个值进行非线性变换,上面讲过我们的非线性变换会使用g函数,这里指的就是激活函数。

下面介绍下常用的激活函数以及使用范围。

1. sigmoid函数

       

sigmoid 函数可将实数映射到[0,1]之间,通常用来做二分类,比如是否的分类问题;而且该函数的导数可以用自身来进行表达。

但是计算量大,而且当数据分布在曲线平滑位置时容易出现梯度消失。因为sigmoid函数曲线在朝向两边,导数越来越趋向于0,就容易进入饱和区。

实际中在多层神经网络中不使用此激活函数。

2. ReLU函数

就是大于0的就是本身,小于0的就全部置为0,特征就是计算量小,对梯度收敛有巨大作用,不会存在梯度消失的情况,

在深层的隐藏层中经常使用做输出,来使整个模型网络的表达能力更强。

缺点就是过于粗暴,会丢失一些特征的信息,所以在其基础上演变出了很多变种的ReLU函数,比如Leaky ReLU。

在实际使用ReLU的时候要小心设置learning rate,否则很容易让网络中一多半的神经元直接死掉。

3. Tanh函数

        

取值范围为[-1,1],输出是以0为中心,在RNN中使用的特别多。在特征相差明显时的效果会很好,在循环过程中会不断扩大特征效果.在二分类问题中实际会比sigmoid更常用,收敛速度会比sigmoid函数快;

缺点就是会出现梯度消失,通过Tanh函数曲线可以发现在两端导数也一样趋向于0,在曲线几乎水平的区域学习非常缓慢。

4. softmax函数

主要适用于多分类问题中,二分类问题则属于多分类问题中的一种,当有多个输入的时候,通过概率求出哪个输入的概率值最大,从而求得那个输入能够胜出。主要用于多分类神经网络输出。这里用指数表达主要是为了让大的更大, 同时要是个可导的函数。

5 . 特殊激活函数 仅仅适用于线性回归,线性函数

实际上相当于没有做任何的非线性变换,所以也无法拟合非线性函数,不能建立非线性模型。

上面介绍了这么多的激活函数,那么激活函数的作用是啥呢。 激活函数的作用是使得神经网络的表达能力更强,如果不带激活函数那么不管神经元有多少层,最终也只是在不断的做线性变换,但是在每个线性变换后加入非线性变换,得到的输出就会更复杂,从而使得神经网络的表达能力更强。

好了上面就介绍了一些常用的激活函数。那么经过线性变换和非线性变换后最后到了输出这里会得到一个预测值,这一完整的步骤就是做的一个正向传播。在正向传播过程中,参数w,b都认为是已知的。

2. 反向传播

然后就进入到反向传播过程,反向传播就是通过正向传播得到的预测值来用损失函数度量与真实值直接的差距,从而进行反向求每一个神经元的参数偏导。

那么说到这里要介绍下常用的损失函数(代价函数)表达有:

线性回归问题中采用均方误差代价函数 

这里可以有意思的讲解下这个均方根误差代价函数的由来。实际我们都知道,既然代价函数是度量预测值与真实值直接的差距,那么就可以直接表示为  ,为了去除正负号的影响于是采用此方式 , , 这里是度量一条样本的,如果是多条样本进来则需要做累加 ,但是这么一来要是m足够大,那么产生的代价函数也会很大,但并不能说明真的大, 所以这里要去除掉数据规模所带来的影响,于是求平均, ,因为是绝对值,不能处处可导,为了保证处处可导,于是进行了求平方得到  。

这样看下来就不会觉得公式很头疼了呢。所以有时候需要学会化繁为简。

分类问题中采用的为交叉熵损失函数

 此为二分类问题采用的交叉熵损失函数

    此为多分类问题采用的交叉熵损失函数

得到损失函数后就可以对参数进行求偏导数。

这里我们认为参数w.b是未知的,X是已知数。 也就反向传播就是确立损失函数,同时计算偏导数和梯度

3. 梯度下降 

在反向传播中求得偏导后,就进入到梯度下降过程,梯度下降过程就是更新w,b ,沿着当前位置的最大方向导数的反向进行下降,下降步长由学习率来决定步长,而通过反向传播计算的就是决定朝哪个方向迈步子。

   其中的 为学习率 ,最开始的w,b则是由初始化得到的。  则是由反向传播得到的。

也就是梯度下降就是做参数更新的过程。 这样三步一起走完就算完成了一轮训练,然后继续循环往复上面的过程从正向传播得到损失函数,然后反向传播得到梯度,梯度下降更新参数,从而来进行不断的迭代更新;而我们的深度学习算法运行的最终目标就是寻找损失函数 的最小值 ,而寻找最小值的方法就是通过梯度下降,梯度下降的核心作用就是在不断的进行更新参数,也就是做梯度下降的过程就是在不断的尝试,一步一步的试出最小值。那么上面就说完了在深度学习训练过程的步骤啦。

深度学习(二)---深度神经网络训练三部曲相关推荐

  1. 深度学习基础: BP神经网络训练MNIST数据集

    BP 神经网络训练MNIST数据集 不用任何深度学习框架,一起写一个神经网络训练MNIST数据集 本文试图让您通过手写一个简单的demo来讨论 1. 导包 import numpy as np imp ...

  2. 【深度学习】02-04-类神经网络训练不起来怎么办?(自动调整学习速率)-李宏毅老师2122深度学习课程笔记

    自动调整学习速率 总结 Training stuck ≠ Small Gradient(训练卡住不代表小梯度)- 有可能是梯度还很大但是训练停止了(在峡谷间震荡不能到峡谷底部) 为什么需要自动调整学习 ...

  3. CV之YOLOv3:深度学习之计算机视觉神经网络Yolov3-5clessses训练自己的数据集全程记录

    CV之YOLOv3:深度学习之计算机视觉神经网络Yolov3-5clessses训练自己的数据集全程记录 目录 视频请观看 训练输出记录 视频请观看 深度学习之计算机视觉神经网络训练Yolov3-5c ...

  4. CV之YOLO:深度学习之计算机视觉神经网络tiny-yolo-5clessses训练自己的数据集全程记录

    CV之YOLO:深度学习之计算机视觉神经网络tiny-yolo-5clessses训练自己的数据集全程记录 目录 训练全部流程记录 训练全部流程记录 1.采用tiny-yolo-5clessses训练 ...

  5. 【深度学习】LSTM神经网络解决COVID-19预测问题(二)

    [深度学习]LSTM神经网络解决COVID-19预测问题(二) 文章目录 1 概述 2 模型求解和检验 3 模型代码 4 模型评价与推广 5 参考 1 概述 建立一个普适性较高的模型来有效预测疫情的达 ...

  6. 深度学习之卷积神经网络(Convolutional Neural Networks, CNN)(二)

    前面我们说了CNN的一般层次结构, 每个层的作用及其参数的优缺点等内容.深度学习之卷积神经网络(Convolutional Neural Networks, CNN)_fenglepeng的博客-CS ...

  7. 【零基础深度学习教程第二课:深度学习进阶之神经网络的训练】

    深度学习进阶之神经网络的训练 神经网络训练优化 一.数据集 1.1 数据集分类 1.2 数据集的划分 1.3 同源数据集的重要性 1.4 无测试集的情况 二.偏差与方差 2.1 概念定义 2.1.1 ...

  8. Keras深度学习使用VGG16预训练神经网络实现猫狗分类

    Keras深度学习使用VGG16预训练神经网络实现猫狗分类 最近刚刚接触深度学习不久,而Keras呢,是在众多的深度学习框架中,最适合上手的,而猫狗的图像分类呢,也算是计算机视觉中的一个经典案例,下面 ...

  9. CV之YOLOv3:深度学习之计算机视觉神经网络Yolov3-5clessses训练自己的数据集全程记录(第二次)

    YOLOv3:深度学习之计算机视觉神经网络Yolov3-5clessses训练自己的数据集全程记录(第二次) 目录 训练记录 训练记录

  10. 深度学习之循环神经网络(12)预训练的词向量

    深度学习之循环神经网络(12)预训练的词向量  在情感分类任务时,Embedding层是从零开始训练的.实际上,对于文本处理任务来说,领域知识大部分是共享的,因此我们能够利用在其它任务上训练好的词向量 ...

最新文章

  1. 更新版-梳理前端开发使用eslint和prettier来检查和格式化代码问题
  2. ios升级注:来着微信平台
  3. python词云图代码示例 无jieba_【词云图】如何用python的第三方库jieba和wordcloud画词云图...
  4. webshpere缓存--JSP
  5. 使用 LLVM 实现一个简单编译器
  6. mysql profiling_MySQL Profiling 的使用
  7. java 创建ppt文件怎么打开文件,JAVA读取PPT文件
  8. Python SQLite教程
  9. 『题解』Codeforces446C DZY Loves Fibonacci Numbers
  10. 最详细的JavaScript教程(高级篇),深入学习JavaScript
  11. 数据库关系代数表达式
  12. LPC1768 SPI 外设控制DA(PCM1796)调试记录
  13. 基于Python实现简单的成绩统计系统
  14. 程序员找不到对象是伪命题?他用大数据找对象,现在婚都结了
  15. un7.2:IDEA中实现登录功能
  16. 深入理解JVM虚拟机13:JVM面试题,看这篇就足够了(87题详解)
  17. 【软件工程】求10个数最大值和平均值 以流程图、盒图、PRD图的形式画出
  18. 第三章-集合论 3.2-Russell 悖论(选读)
  19. 高性能架构学习路线图-分布式架构演进
  20. svnsync: Failed to get lock on destination repos, currently held by 'localhost.localdomain

热门文章

  1. 闲置路由器怎么利用起来?
  2. 武汉星起航:“短视频+电商”如何抓住用户“关键时刻”?
  3. python爬取英雄联盟所有皮肤价格表_利用Python协程来爬取LOL所有英雄的皮肤高清图片...
  4. 2021届腾讯实习笔试题
  5. java装逼的话_程序员装逼指南(语言篇)
  6. 星际巡航术—玩转javascript中this!
  7. project.pbxproj文件介绍
  8. IGBT导通损耗和开关损耗
  9. 一步一步学Spring Boot(二)课程发布了~~~
  10. 定期把电脑的文件备份到服务器,怎么让电脑定期自动备份文件或文件夹(学会这一招,让电脑自动备份你的重要资料)...