【Day 16】深度学习(Deep Learning)--- Tip(一)

深度学习流程

我们知道深度学习是三个步骤,首先定义一个function set和structure,之後决定Loss function,接着就可以用Grandient Descent去做最佳化。
做完这三个步骤之後就会得到一个训练好的Neural Network,然後你要去看这个Neuron Network在你的训练资料上有没有得到好的结果,如果没有,就要回去三个步骤中做修改,让你在训练资料上得到好的结果。
接着就要去看你的模型在测试资料上有没有得到好的结果,如果没有,就代表发生了Overfitting,那就要回去三个步骤中做修改,要注意的是,修改完之後要再去看在训练资料上得到的结果还是不是好的。

不是所有不好的结果都是Overfitting

并不是所有在测试资料上得到不好的结果都是Overfitting,也有可能是因为在训练的时候没有训练好才导致结果不理想,因此只要对模型有修改,就要回去看在训练资料上是不是有得到好的结果。

用不同的方法来解决不同的问题,举例来说Dropout方法是在测试结果不好的时候使用,如果是训练结果不好的时候使用只会越训练越不好。

训练结果不好

New activation function

  • 架构设计不好
    • 换一个Activation function

假设我们是使用Sigmoid function,从图中可以发现Deeper不一定代表better,当层数越来越多,准确率一开始持平最後往下掉,但这不是Overfitting,因为这是在训练资料上得出的结果,所以是模型训练坏了。

Vanishing Gradient Problem

而会这样的原因是当你的Network很深的时候,在靠近输入的地方Gradient很小,而在靠近输出的地方Gradient很大,如果设定同样的Learning rate,靠近输入的地方参数更新就会很慢,靠近输出的地方参数更新则会很快,就会产生输入还是几乎随机的时候,输出已经收敛了,就会以为是找到Local minimum。

从直觉上来讲,我们知道某一个参数 https://chart.googleapis.com/chart?cht=tx&chl=w 对total cost https://chart.googleapis.com/chart?cht=tx&chl=C 的偏微分,可以理解成当我把某一个参数做小小的变化,它对这个cost的影响如何,以此决定这个参数的Gradient的值有多大。
於是我们就可以把第一个layer里面的某一个参数加上 https://chart.googleapis.com/chart?cht=tx&chl=%5CDelta%20w,然後看它的输出跟它的目标之间的Loss有甚麽影响。

从图中可以看到,如果 https://chart.googleapis.com/chart?cht=tx&chl=%5CDelta%20w 很大,通过Sigmoid function之後输出会变小。

也就是说在输入的地方改参数,对输出的变化其实是很小的,对cost的影响也很小。


参考资料

李宏毅老师 - ML Lecture 9-1


<<:  Day 16 | 第一个 Flutter 专案

>>:  D14 - 服务生!我要 this this this

从 IT 技术面细说 Search Console 的 27 组数字 KPI (14) :检索统计

在 KPI 的层级中,提到在分成几种 Level 之前,有列出三组最重要的 Search Conso...

Binary Search

二元搜寻BigO(log n) 相较於线性搜寻时间复杂度实在好太多 必须是被排序好的 由於每次对半砍...

【第三天 - Stack 题目分析】

先简单回顾一下,今天预计分析的题目: Valid Parentheses 昨天问到,如果 ([)] ...

基础常用:python 从字串中取出数值

前言 在实作时,常常会把所有资讯存成 csv 档做纪录,用 pandas 的 read_csv 读取...

.Net Core Web Api_笔记23_api结合EFCore资料库操作part1_专案前置准备

专案前置准备 建立并配置好visual studio .net core web api专案 .ne...