主頁 >  其他 > 【機器學習】李宏毅——類神經網路訓練不起來怎么辦

【機器學習】李宏毅——類神經網路訓練不起來怎么辦

2022-12-16 07:43:12 其他

如何判斷導數值為零的點的型別

當發現訓練資料集誤差不再下降的時候,不是只有卡在區域最小值的情況,還有另外一種情況是處于鞍點,鞍點位置處雖然其導函式為零,但是其既不是區域最大值也不是區域最小值,如圖:

在這里插入圖片描述

因此,我們把區域最小值和鞍點這種點統稱為駐點(critical point),但這兩種情況是截然不同的,因為如果是區域最小值那么周圍都是比該點更大的loos,但是鞍點不一樣,周圍可能會有更小的loss,因此要認識到如何分辨這兩種點,

判斷導數為0的點是鞍點還是極值點

首先需要了解一下泰勒展開式,假設我們在\(\theta=\theta^{`}\)處進行二階泰勒展開(忽略冗余項),即:

\[L(\theta)\approx L(\theta^`)+(\theta-\theta^`)g+\frac{1}{2}(\theta-\theta^`)^TH(\theta-\theta^`) \]

其中,\(g\)為梯度,是一個向量,而\(H\)是一個矩陣,存放的是L的二階微分,即:

\[g=\nabla L(\theta^`)\quad g_i=\frac{\partial L(\theta^`)}{\partial \theta_i}\\ H_{ij}=\frac{\partial^2}{\partial \theta_i \partial \theta_j}L(\theta^`) \]

在這里插入圖片描述

可以看成后面兩項就是可以補齊這兩個點之間的差距,使得值更加接近

那么當遇到導數值為0的點是,將會有\(g=0\),那么第一項為0,那么只有第二項起作用,為了表達方便,設\(v=\theta-\theta^`\),則若

  • 對于任意\(v\),均有 \(v^T Hv>0\),則相當于在\(\theta^`\)周圍均有\(L(\theta)>L(\theta^`)\),那么就說明這是一個區域最小值
  • 對于任意\(v\),均有 \(v^T Hv<0\),則相當于在\(\theta^`\)周圍均有\(L(\theta)<L(\theta^`)\),那么就說明這是一個區域最大值
  • 對于任意\(v\),有 \(v^T Hv>0\)也有 \(v^T Hv<0\),則說明該點是一個鞍點

但是總不可能把所以的\(v\)都代進去算,因此要看矩陣\(H\)的性質!

  • \(H\)為正定矩陣(positive definite),即所有特征值(eigen valuse)都為正,那么就滿足區域最小值的條件
  • \(H\)為負定矩陣(negative definite),即所有特征值(eigen valuse)都為負,那么就滿足區域最大值的條件
  • \(H\)的特征值有正有負,那么就滿足鞍點的條件

\(H\)除了可以幫助我們判斷是什么型別的點之外,還可以在梯度為0的情況下幫助我們判斷下一次如何更新引數,具體推導程序如下:

假設\(u\)是矩陣\(H\)的一個特征向量,\(\lambda\)是對應的特征值,那么

\[u^THu=u^T(\lambda u )=\lambda \lVert u \rVert^2 \]

那么如果\(\lambda<0\),則這一項就小于0,那么如果讓

\[L(\theta)=L(\theta^`) + \lambda \lVert u \rVert^2 \]

就可以讓L減小,因此只要讓\(\theta - \theta^`=u\),則\(\theta=\theta^`+u\)就可以讓損失函式進一步減小,因此只要找出特征值小于0對應的特征向量,就可以繼續更新引數了

但其實這個方法在大部分情況是不可行的,因為是二階微分的矩陣,而且求特征值和特征向量,這個計算量太大了

另外一個需要補充的點是由于我們之間的視角都是二維或者三維視角,但實際上資料是特別高的維度的,因此能夠區域最小值是非常少見的,大多數情況是一個鞍點,因為要讓海參矩陣的特征值全部為正幾乎是不可能的

批次(batch)與動量(momentum)

Batch

Batch實際上是說:在進行計算損失以及梯度時,我們并不是每次都對全部的資料計算總損失再來計算梯度,而是將資料分為許多份,每一份代表一個batch,然后每次計算一個batch中的損失再計算梯度再更新引數,每一份都計算及更新完畢稱為一個epoch,如下圖:

在這里插入圖片描述

而我們可以選擇執行多次的epoch,每次都有一個shuffle程序,即重新打亂順序,重新劃分batch

而這個batch劃分的大小就是一個值得討論的問題:

  • 當batch更大:雖然花費時間更長,但是總體上對梯度的計算更加精確,即更新引數更加有效
  • 當batch更小:花費時間短,但是具有一定的噪聲性質,更新的引數不一定是有效的

并且不一定batch大花費的時間就長,GPU具有平行運算的能力,在其能力范圍內batch的增加對其計算時間基本沒什么影響,而如果計算損失和梯度的時間沒什么太大的差距的話,那么就會在更新引數的次數上體現出時間的差距了,如下圖:

在這里插入圖片描述

盡管batch=1能夠使得每一次更新時計算資料的速度特別快,但是由于每次epoch需要進行的更新次數太多了,因此其總體一次epoch的時間是特別長的,因此在考慮平行計算后不是batch越小越好,

那么這樣是不是就說明越大的batch時間沒有劣勢就越好了呢?并不是!來看下圖:

在這里插入圖片描述

在同一個模型下,其訓練資料集的精確度居然隨著batch的增大而逐漸減小,因此這不是模型的問題,這就是batch改變而引起的優化演算法的問題

直觀上的解釋如下圖:

在這里插入圖片描述

可能在整體的損失函式上陷入了區域最小值,此時如果不考慮前述的海森矩陣的話那么就無法繼續進行梯度更新;但是在更小的batch上可以認為每一次選用的損失函式是具有一定差異的,在L1上陷入區域最小值那么下一次更新的時候是L2,該點并不是區域最小值,那么就還可以繼續更新繼續使得損失函式降低,還有論文證明了如果在訓練集上想辦法讓大的batch和小的batch的精確度都訓練到接近一樣,但是在測驗集上很可能會出現大的batch的模型的效果會差很多,如下圖:

在這里插入圖片描述

直觀上解釋可以這么認為:

在這里插入圖片描述

假設在訓練集的誤差函式上有兩類最小值的點,第一種Flat Minima是比較好的,另一種Sharp Minima是比較壞的,那么對于小batch來說由于其更新引數的方向具有一定的隨機性,因此即使陷入了Sharp Minima里面,也有較大的概率能夠更新出來,而只有在Flat Minima里面周圍都比較平坦才能夠困住它們引數的更新;對于大batch如果陷入Sharp Minima之后幾乎就不可能出來了,因為梯度為0,那么假設當前測驗集的誤差函式是相對于訓練集的誤差函式進行移動,那么按照剛才的說法就會導致大batch的效果很差,而小batch的效果就比較穩定

經過上述分析,對比如下:

在這里插入圖片描述

所以batch也就成為了一個需要調整的超引數

Momentum

在這里插入圖片描述

在現實生活中,如果具有動量,那么在損失函式的下滑中是很可能不會卡在梯度為0的鞍點或者區域最小值的,因為動量很可能會帶著他繼續往前走,因此要思考能不能加入這個動量的想法來解決駐點的問題呢?

先回顧一下梯度下降的程序:每一次引數更新的方向都是梯度的反方向

在這里插入圖片描述

那么如果加入了動量這個因素,則移動的方向是梯度的反方向加上前一步移動的方向這兩個綜合起來決定的,如下圖:

在這里插入圖片描述

每次的方向計算為:

\[m^{t+1}=\lambda m^t - \eta g^t \]

而由于\(m^t\)\(m^{t-1}\)\(g^{t-1}\)有關,以此類推可以得到\(m^t\)\(g^1\)\(g^{t-1}\)都有關,因此另一種直觀解釋就是不只是考慮當前梯度的反方向,而是過去所有梯度方向的綜合

自動調整學習率

如果在訓練程序中發現訓練誤差不再下降,這可能并不是卡在了駐點的問題,這時候需要檢查一下梯度向量是否為0,如果為0,才是真正卡在了駐點的位置,但是通過下圖可以發現在后續誤差不再下降時其梯度仍然具有很大的變化,仍然不會零,但就是不能夠再誤差減小,這很可能就是在最小值的兩邊來回的震蕩導致的
,在這里插入圖片描述

而僅僅看上圖可能會覺得是學習率設定得太大了,那么看下圖:

在這里插入圖片描述

如果學習率很大,那么極大地可能一直震蕩,如果將學習率調整到足夠小,雖然它能夠進入到中間的位置然后左轉去靠近最小值的點,但是在中間部分梯度已經很小了,而你的學習率也很小,所以幾乎是不可能走完那一段路程的,因此需要自動調整學習率,

在這里插入圖片描述

我們總希望在梯度比較小的方向上能夠有較大的學習率,在梯度比較大的方向上能夠有比較小的學習率,因此需要對每個引數定制學習率,即:

\[\theta^{t+1}_i \leftarrow \theta^t_i - \frac{\eta}{\sigma^t_i}g^t|i \]

則說明現在學習率不僅與i有關而且與t有關,因此與具體的引數有關,而且也是具有迭代性質的,更新公式如下:

在這里插入圖片描述

這為什么能夠做到在梯度比較小的方向上能夠有較大的學習率,在梯度比較大的方向上能夠有比較小的學習率呢?如下圖:

在這里插入圖片描述

當梯度比較大,那么\(\sigma\)算出來就大,那么學習率就小,相反也同理,

但這個方法有一個問題,就是例如同一個引數在一開始其梯度比較大,后面的梯度比較小,但這樣前面大的梯度已經在根號里面累積了,在梯度突然變小的時候很難讓學習率立馬反應過來而增大的

因此改進為如下的RMSProp方法:

在這里插入圖片描述

可以手動調整權重\(\alpha\)來實時調整學習率的大小,例如下圖:

在這里插入圖片描述

在中間滑坡的位置直接將\(\alpha\)減小,那么學習率就會降低,從而可以慢下來;而在后面平坦的位置再將\(\alpha\)增大,那么學習率就會增加,

因此現在較好的方法就是RMSProp+Momentum,稱為Adam

還有另外一個可以調整的地方為固定的\(\eta\)

在這里插入圖片描述

第二個方式有點難以理解,但可以這樣解釋:由于\(\sigma\)是一個累積的結果,累積一個方向的梯度有多大有多小,那么一開始仍然處于一個摸索的階段,因此可以設定學習率比較小防止其亂飛,當累積到一定程度比較穩定之后,學習率也逐漸上升到較大的值,那么再穩定移動,此時再來慢慢減小,

那么結合上述的方法可以使用這種方法:

在這里插入圖片描述

但有一個疑問就是\(m^t_i\)\(\sigma^t_i\)會不會相互抵消,其實是不會的,因為m雖然考慮了所有的梯度,但是也考慮了它們的方向以及正負,而\(\sigma\)是將各個梯度的平方求和再開根號,所有并不會有抵消的作用

損失函式的影響

在這里插入圖片描述

對于分類問題,也可以用回歸的模型,只需要將輸出改為一個向量即可

在這里插入圖片描述

且一般來說,對于用模型計算出來的y,通常是加上一個softmax函式處理之后,再來跟理想\(\hat{y}\)進行對比相似度的,

softmax的處理程序如下:

在這里插入圖片描述

而上述的例子是三個類別,雖然softmax也可以運用在兩個類別的問題上,但更多在面對兩個類別的問題時是利用Sigmoid函式,,不過在兩個類別時這兩種方法是等價的,

而在比較\(y`\)\(\hat{y}\)時,也有幾種方法,例如:

在這里插入圖片描述

需要知道的是最大可能性和最小化交叉熵是等價的

下面通過一個例子來表明這兩種損失函式的區別:在兩張圖中都可以看到,在右下角都是\(y_1\)大而\(y_2\)小,那么損失函式都很小,左上角都是\(y_1\)小而\(y_2\)大,暗惡魔損失韓式都很大,這就很滿足我們的預期

在這里插入圖片描述

在MSE的損失函式中,如果訓練的起點位于左上方的損失函式很大的位置,其很明顯的特性在于其是非常平坦的,梯度很小,大面積都很大的損失,因此訓練起來就很難走往右下角,而在交叉熵中就不會有這個問題,因此在分類問題中要用交叉熵作為損失函式

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/540038.html

標籤:其他

上一篇:初始Docker

下一篇:【機器學習】李宏毅——淺談機器學習原理+魚與熊掌兼得的深度學習簡述

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more