CS231n-2017 Lecture3線性分類器、最優化筆記

圖片向量與標簽得分向量:

上節講到,圖片可以被展開成一個向量,對于這個向量,假設它有D維,那么它就是D維空間的一個點,又假設我們的標簽集合總共有K種,我們可以定義一個K維標簽得分向量,每一個維度對應著其相應標簽的得分。那么我們就可以想辦法建立一個線性映射,將一個圖片向量映射成一個標簽向量,將其中得分最高的維度所對應的標簽作為這張圖片的標簽,這就是線性分類器的本質

即:

設訓練集X?有N個元素,其中x_i\in R^D, 每個x_i?有其對應的標簽向量?y_i \in R^K

線性分類器:

對于上述的向量對應關系

則我們可以建立一個線性分類器:

f(x,W) = Wx+b

其中W是一個K \times D的矩陣,被稱為權重(權重是提前設定好的,這里我們假設模型已經找到最優權重),b是一個K維向量,被稱為偏差向量(這個向量也已經找到了最優)

這個函數會輸出對于x映射出來的標簽得分預測向量,然后我們可以根據該預測向量的最高得分維度來預測x所對應的圖片的標簽

偏差與權重的合并技巧:

我們可以將圖片向量增加至D+1維,將W也增加至K\times (D+1),將其第D+1列作為原本的b,則可以將函數簡化為

f(x,W) = Wx

線性分類器的直觀理解:

第一種理解:

對于W的第i行,其每一列的元素分別就是D維圖片向量對應像素對第i行對應標簽的貢獻權重,當權重為正時,就說明該位置(包含了長、寬、顏色三個信息)的像素值對該標簽分類是正貢獻,且越高越好,權重為負時相反

同時,我們可以將第i行這一行向量映射回圖片三維數組,從而得到該標簽所對應的圖片模版,可以直觀地觀察到其分類喜好

第二種理解:

對于第i個標簽,如果我們將所有令f(x,W)?的第i個分量為0的所有x向量組成一個平面,那么這個平面就是第i個標簽的分界面,雖然高維空間不好想象,但我們可以將D維空間當做二維平面來理解,此時分界面必有一邊會使得第i個分量的值>0(則這個區域就是第i個標簽所屬的區域),而另一面會使得第i個分量的值<0(第i個標簽所不屬于的區域)。那么對于K個標簽來說,就會有K個分界面,將D維空間線性劃分為K個標簽所屬的區域,因此我們只需要判斷輸入圖像向量落入哪個區間,即可預測其標簽

Loss Function(損失函數):

對于不同的權重矩陣W,我們需要對其給出的預測向量評分,從而評價其預測結果的好壞,這里,我們使用Loss Function作為評分標準,Loss越大時,預測結果越差,Loss越小時,預測結果越好

Multiclass Support Vector Machine Loss(多類支持向量機損失):

這是眾多形式Loss中的一種,被稱為折葉損失(hinge loss),具體定義式為:

L_i = \sum_{j \ne y_i}{max{(0,s_j-s_{y_i}+\Delta)}}

L=\frac{1}{N}\sum_{i=1}^{N}{L_i}

其中L_i?是對第i個圖片向量預測的損失,L?是總損失,y_i?是x_i所對應的標簽所對應的維度,j是遍歷維度,s_j是預測向量在j維度所對應的預測值,s_{y_i}是預測向量在y_i維度所對應的預測值,\Delta是自定義超參數

max{(0,s_i-s_{y_i}+\Delta)}?的含義就是,我們遍歷預測向量的每一維度(除了正確標簽所對應的維度),即遍歷的都是錯誤標簽所對應的維度,若正確標簽得分減去該錯誤標簽得分的差少于\Delta?,則說明預測得分的差距不夠大,對Loss作出了一定貢獻,否則對Loss的貢獻為0

由此可見,\Delta是我們所預期的正確維度與錯誤維度所需要拉開的差距

正則化(Regularization):

上面的損失函數會有一個問題,使得分類器能夠正確分類數據集內每個數據的W并不唯一,我們希望能向W中某些特定的權重添加一些偏好,對其他權重則不添加,從而來更好地區分每個滿足分類Loss為0的W,即向損失函數增加一個正則化懲罰R(W)?部分

通常采用L2范式,即:

R(W) = \sum_k\sum_lW_{k,l}^2

即對W中所有元素平方后求和作為正則化懲罰,它不是數據的函數,僅僅是權重的函數

至此,我們可以給出完整的多類SVM損失函數,由數據損失和正則化損失組成,即

L = \frac{1}{N}\sum_i{L_i}+\lambda R(W)

其中\lambda也是超參數,需要具體確定正則化懲罰的的權重

L2正則化最好的性質就是能對大數值權重進行懲罰,進而提升模型的泛化能力,因為平方項對大數值的懲罰更為嚴厲,導致沒有哪個維度能獨自于整體有過大的影響,鼓勵分類器將所有維度的特征都用上,最后體現出來就是訓練出來的模型的權重參數更小更分散

需要注意的是,偏差b沒有這樣的效果,因為它并不影響輸入向量的維度所造成的得分影響,因此通常只對權重W進行正則化,而不正則化b

由于正則化懲罰的存在,導致Loss通常不為0,因為當且僅當W=0時Loss才為0

Softmax分類器

Softmax分類器的損失函數與SVM不同,本質上是邏輯回歸分類器在面對多個分類時的拓展,其Loss稱為交叉熵損失(cross-entropy loss),公示如下:

L_i = -log(\frac{e^{f_{y_i}}}{\sum_j{e^{f_j}}})?, 又等價于?L_i = -f_{y_i} + log(\sum_j{e^{f_j}})

其中f_j為標簽得分向量的第j維分量

softmax函數:

f_j(z) = \frac{e^{z_j}}{\sum_k{e^{z_k}}}

簡單理解為函數對第j個維度進行壓縮,輸出一個在[0,1]?的值,可以把它看作分類到該標簽的概率

cross-entropy Loss的合理性解釋:

信息論解釋:

定義在“真實”分布p與估計分布q之間的交叉熵如下:

H(p,q) = -\sum_xp(x)logq(x)

顯然,當估計分布q越接近真實分布p時,H越小

而我們的Loss函數公式恰好對應的就是真實概率分布p(假設是標簽j,那么就是第j維為1,其余維度全為0的向量),與估計分類概率分布q,即預測出來的標簽得分向量通過指數歸一化處理的映射出來的概率分布,又由于p(x)只在x=j時為1,其余為0,因此H的求和只保留了x=j的項,即q(x)所對應的就是\frac{e^{f_{y_i}}}{\sum_je^{f_j}}

所以我們最小化Loss時,就是在使得q分布逐漸逼近p分布

有,交叉熵可以寫成KL散度(KL divergence)的形式,即

H(p,q) = H(p) + D_{KL}(p||q)

H(p) = -\sum{p(x)log{p(x)}} = 0

所以本質上就是對分布p與分布q的KL散度做最小化,而KL散度正是用來判斷兩個分布在信息上的的相似程度的

概率論解釋:

給出公式,在給定x_i,W的條件下,我們預測出y_i的概率為

P(y_i|x_i,W) = \frac{e^{f_{y_i}}}{\sum_j{e^{f_j}}}

而我們的Loss可以看作是歸一化處理后,正確標簽的負對數概率,我們在最小化這個值,就是在最大化正確標簽的概率,從而去求出其對應的W參數,即可以看作是在對W參數進行最大似然估計(MLE)

實際計算時的注意事項:

對于sofmax函數來說,存在指數即有可能存在大數值,而對大數值進行除法會導致數值計算的不穩定,因此我們需要對公式進行等價變形:

\frac{e^{f_{y_i}}}{\sum_j{e^{f_j}}} = \frac{Ce^{f_{y_i{}}}}{C\sum_je^{f_j}} = \frac{e^{f_{y_i}+logC}}{\sum_j{e^{f_j+logC}}}

這里,我們選定logC = -max_jf_j,將所有分量的元素平移,使得最大值為0,從而避免了單個大數值的出現

SVM與Softmax的比較:

兩種分類器都是接受輸入圖片向量,然后輸出對應的評分向量f

但SVM輸出的f中的元素值被看作是分類評分,它的損失函數鼓勵正確標簽的得分至少要比錯誤標簽的得分高出\Delta

而Softmax輸出的f中的元素值被看作是該標簽對應的未進行歸一化的對數概率,鼓勵正確標簽的概率變高,而錯誤標簽的概率變低

因此,SVM的計算是沒有標定的,無法對各個維度的評分值給出直觀地解釋,而softmax的輸出可以簡單地理解為該維度標簽所對應的“概率”

在softmax中,輸出的概率的分布的集中/離散程度是會由正則化參數\lambda?直接決定的

\lambda越大,權重W被懲罰的越多,數值越小,這樣算出來的各個分量的分數也會更小,則導致各個標簽的概率更為接近,也就是概率的分布更為分散了。隨著\lambda的增大,最后輸出的概率會接近于均勻分布

最優化問題

有了上述的前提,我們現在所需要做的就是,在給定超參數的前提下,如何去找到使得Loss最小的W參數

梯度下降法:

在給定數據集輸入的前提下,我們可以將W矩陣中的所有參數看作Loss函數的變量,假設有n=K\times (D+1)個變量,那么Loss函數就是一個n維函數,最小化Loss問題其實就是一個函數優化問題,實際這個函數可能非常復雜,因此我們無法通過求駐點的方法求出極小值,則需要使用梯度下降法

我們求出Loss函數在給定x_i這一點關于n個變量的偏導數,這n個導數組成的向量稱為梯度,梯度向量所指向的方向就是在該點處函數圖像上升最陡峭的地方,如果我們向著這個方向的反方向前進一小步(這里稱作步長,又學習率,是一個重要超參數),那么就會以最快的速度下降,然后再重復迭代,直到落入局部極小值

即有公式:

W_t = W_{t-1} - \alpha\nabla_W L(x_i,y_i,W_{t-1})

其中W_t為第t次梯度下降迭代更新的權重矩陣,\alpha為學習率

梯度計算方法:

1.數值計算梯度,采取有限微分計算梯度,精度低,運算量大,不推薦

2.分析計算梯度,直接使用公式計算偏導數,即有公式:

\nabla_WL(W) = \frac{1}{N}\sum_{i=1}^{N}\nabla_WL_i(x_i,y_i,W) + \lambda \nabla_WR(W)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/91918.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/91918.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/91918.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

windows wsl ubuntu 如何安裝 open-jdk8

安裝步驟 jdk dhd:~$ java -version Command java not found, but can be installed with: sudo apt install openjdk-11-jre-headless # version 11.0.20.11-0ubuntu1~22.04, or sudo apt install default-jre # version 2:1.11-72build2 sudo apt install op…

Javascript進程和線程通信

JavaScript 中的進程通信&#xff08;IPC&#xff09;和線程通信是實現高性能、高并發應用的核心技術&#xff0c;尤其在處理 CPU 密集型任務或跨環境數據交互時至關重要。以下從底層機制到應用場景的詳解&#xff1a;&#x1f9e9; ??一、進程通信&#xff08;Inter-Process…

堆堆堆,咕咕咕

1.找TopK問題要找到最前面的k個元素void swap(int *a,int *b) {int temp*a;*a*b;*btemp; } //向下調整最小堆 void minheapify(int arr[],int n,int index) {int left2*index1;int right2*index2;int smallestindex;if(left<n&&arr[left]<arr[smallest]) smalles…

n8n教程分享,從Github讀取.md文檔內容

從上一篇我們了解到了如何安裝 n8n 那么這節課我們嘗試從github的個人倉庫獲取某個文件的內容 目標如下 content/business/1.how-to-use-money.mdx 總流程圖 流程詳解 第1步&#xff1a;申請 GitHub Personal Access Token (Classic) 在gitrhub 個人 設置選項 申請 GitHub P…

分布式ID與冪等性面試題整理

分布式ID與冪等性面試題整理 文章目錄分布式ID與冪等性面試題整理一、分布式ID1. 為什么需要分布式ID&#xff1f;2. 分布式ID的核心要求3. 常見分布式ID方案(1) UUID(2) 數據庫自增(3) Redis自增(4) 雪花算法(Snowflake)(5) 美團Leaf/百度UidGenerator4. 雪花算法詳解二、冪等…

node.js學習筆記1

目錄 Node.js是什么 Node.js下載與安裝 Buffer緩沖區 一些計算機硬件基礎 程序運行的基本流程 Node.js是什么 node.js是一個JavaScript運行環境&#xff0c;或者說&#xff0c;node.js是一個可以運行JavaScript的軟件。 可以用于開發服務端、桌面端、工具類應用。 服務器…

游戲開發日志

我來為您逐行詳細講解這個 ViewMgr.cs 文件。這是一個Unity游戲中的視野管理系統&#xff0c;用于優化游戲性能。## 文件結構概覽這個文件主要包含以下幾個部分&#xff1a; 1. 數據結構和接口定義 2. 視野管理器 ViewMgr 類 3. 工具類 ViewTools讓我逐行為您講解&#xff1a;#…

使用 PlanetScope 衛星圖像繪制水質參數:以莫干湖為例

1.數據采集 我使用ArcGIS Pro 中的Planet Imagery插件下載了 2023 年 6 月 25 日的安卡拉莫干湖衛星圖像。 圖 1&#xff1a;使用 Planet 插件下載衛星圖像 圖 2&#xff1a;下載圖像的日期和傳感器選擇 我查閱的研究中指出&#xff0c;使用無降水時期的衛星圖像對于水質測定…

Docker部署前后端分離項目——多項目共享環境部署

目錄 一、簡介 二、文件目錄結構 三、前端部署流程&#xff08;多nginx&#xff09; 3.1 前端打包 3.2 編寫部署文件——項目1&#xff08;consult-system&#xff09; 3.3 編寫部署文件——項目2&#xff08;person-system&#xff09; 3.4 前端部署至linux服務器 3.5…

學習筆記(39):結合生活案例,介紹 10 種常見模型

學習筆記(39):結合生活案例&#xff0c;介紹 10 種常見模型線性回歸只是機器學習的 “冰山一角”&#xff01;根據不同的任務場景&#xff08;分類、回歸、聚類等&#xff09;&#xff0c;還有許多強大的模型可以選擇。下面我用最通俗易懂的語言&#xff0c;結合生活案例&#…

BabyAGI 是一個用于自構建自主代理的實驗框架

這個最新的 BabyAGI 是一個用于自構建自主代理的實驗框架 核心是一個新的函數框架 &#xff08;functionz&#xff09;&#xff0c;用于存儲、管理和執行數據庫中的函數。它提供了一個基于圖形的結構&#xff0c;用于跟蹤導入、依賴函數和身份驗證密鑰&#xff0c;并具有自動加…

商業秘密視域下計算機軟件的多重保護困境

作者&#xff1a;邱戈龍、柯堅豪重慶商業秘密律師廣東長昊律師事務所引言&#xff1a;計算機軟件保護的復雜性 在商業秘密保護的宏大版圖中&#xff0c;計算機軟件因其技術密集性和創新性占據著特殊地位。軟件的真正價值不僅在于其代碼本身&#xff0c;更在于其背后的流程、邏…

深入理解 Spring Boot 自動配置原理

Spring Boot 之所以能“開箱即用”&#xff0c;其核心就在于 自動配置機制&#xff08;Auto Configuration&#xff09;。本文將深入剖析 Spring Boot 自動配置的工作原理&#xff0c;從注解入手&#xff0c;再到底層的源碼機制&#xff0c;揭開 Spring Boot 背后的“魔法”。 …

Ubuntu18.04開機啟動執行腳本

#!/bin/bash # 運行 .NET Core 應用程序 dotnet /home/bruce/atg/SmartConsole.dll &# 打開瀏覽器 firefox 給文件權限sudo chmod 777 start.sh運行gnome-session-properties打開系統自帶的一個啟動程序

c語言進階 字符函數和字符串函數

字符函數和字符串函數字符函數和字符串函數1. strlenstrlen 函數詳解模擬實現1.計數器方式2.不能創建臨時變量計數器&#xff08;遞歸&#xff09;3.指針-指針的方式2. strcpystrcpy 函數詳解模擬實現3. strcatstrcat 函數詳解模擬實現4. strcmpstrcmp 函數詳解模擬實現5. strn…

(LeetCode 每日一題) 1233. 刪除子文件夾 (排序)

題目&#xff1a;1233. 刪除子文件夾 思路&#xff1a;排序&#xff0c;時間復雜度0(L*nlogn)。 文件夾a的子文件b&#xff0c;b字符串字典序列一定是大于a的&#xff0c;所以直接將字符串數組folder升序排序。每次只需判斷當前字符串&#xff0c;是否是父文件夾數組v最后一個…

集成算法學習bagging,boosting,stacking

baggibg(rf隨機森林) adaboostibg 用來展示 Project Jupyter | Home 展示源碼 Eclipse IDE | The Eclipse Foundation Eclipse 下載 |Eclipse 基金會 教程8-Adaboost決策邊界效果_嗶哩嗶哩_bilibili (23 封私信) 圖解機器學習神器&#xff1a;Scikit-Learn - 知乎 Baggi…

HOOPS SDK賦能PLM:打造全生命周期3D數據管理與協作能力

在制造業和工業領域&#xff0c;產品全生命周期管理&#xff08;PLM&#xff09; 已成為驅動企業數字化轉型、提升創新力與運營效率的核心引擎。一個高效的PLM平臺不僅需要管理海量的設計數據&#xff0c;還必須在設計、制造、供應鏈、銷售和服務等多個環節之間無縫流轉信息&am…

解決 Selenium 頁面跳轉過快導致的內容獲取問題:從原理到實踐

在使用 Selenium 進行網頁自動化操作時&#xff0c;很多開發者都會遇到一個頭疼的問題&#xff1a;頁面還沒加載完&#xff0c;代碼就已經執行到下一句了。結果要么是元素找不到&#xff0c;要么是獲取的內容不完整&#xff0c;甚至直接拋出異常。今天我們就來聊聊如何優雅地解…

【Python練習】051. 編寫一個函數,實現簡單的定時器功能

051. 編寫一個函數,實現簡單的定時器功能 051. 編寫一個函數,實現簡單的定時器功能 代碼說明: 示例運行: 擴展功能 代碼說明: 實現Python定時器的幾種方法 051. 編寫一個函數,實現簡單的定時器功能 以下是一個簡單的Python函數,用于實現定時器功能。這個定時器可以設置…