李宏毅機器學習1

一. 機器學習:

在現實世界中我們是把我們人類的“經驗”以數據的形式來存儲,所以我們想着能不能讓機器從這些數據進行學習,歸納中我們人類中的經驗來進行推理。簡稱機器學習。
工程化定義:假設用P來評估計算機程序在某任務類T上的性能,若一個程序通過利用經驗E在任務T上獲得了性能改善,則我們就說關於T和P,該程序對E進行了學習。
人話就是:我們想讓機器從我們這些人類的經驗進行學習來幫我們解決一些任務,如果機器完成的不錯,則我們會說機器從數據中得到了學習。

二. 學習中心極限定理,學習正態分佈,學習最大似然估計

2.1推導迴歸Loss function

損失函數公式:
我們先是搭建好一個模型函數,來輸出output。然後根據output和實際的目標值的差距來構造出一個損失函數,來對模型函數裏面的w和b進行更新,直到讓模型函數的輸出和實際的目標值的差距最小,也就是得到最優函數
(1.1)L(f)=n=110(y^nf(xcpn))2, L(f) = \sum_{n=1}^{10}\left(\widehat{y}^{n}- f(x^n_{cp})\right)^{2}, \tag{1.1}
(1.2)L(f)=n=110(y^n(b+wxcpn))2, L(f) = \sum_{n=1}^{10}\left(\widehat{y}^{n}-\left(b+w \cdot x_{c p}^{n}\right)\right)^{2}, \tag{1.2}

2.2損失函數與凸函數之間的關係

我們想要構造損失函數是爲了得到損失函數的最小值,然後得到最小值對應的w和b。
    凸優化,即在一系列以凸函數爲條件的限制下,求解目標凸函數的最小值。即使目標函數本身是非凸函數,我們也可以使用一個凸函數去逼近它,以圖尋找到一個最優的初始點來求解非凸函數的最小值問題。
    所以我們往往會想通過凸優化的方法,以此來儘可能得到損失函數的最小值。

2.3全局最優和局部最優

在這裏插入圖片描述
這張圖就講的很清楚

三. 學習導數,泰勒展開

3.1推導梯度下降公式

承接公式(2.1),(2.2),以此

(2.1)Lw=n=1102(y^n(b+wxcpn))(xcpn), \frac{\partial L}{\partial w}= \sum_{n=1}^{10} 2\left(\hat{y}^{n}-\left(b+w \cdot x_{c p}^{n}\right)\right)\left(-x_{c p}^{n}\right), \tag{2.1}
(2.2)Lb=n=1102(y^n(b+wxcpn)), \frac{\partial L}{\partial b}= \sum_{n=1}^{10} 2\left(\hat{y}^{n}-\left(b+w \cdot x_{c p}^{n}\right)\right), \tag{2.2}
剛開始函數的w0w^0隨機生成的,然後通過計算上面損失函數的微分進行更新。
w1w0ηLww=w0,b=b0b1b0ηLbw=w0,b=b0 w^{1} \leftarrow w^{0}-\eta\left.\frac{\partial L}{\partial w}\right|_{w=w^{0}, b=b^{0}} \quad b^{1} \leftarrow b^{0}-\eta\left.\frac{\partial L}{\partial b}\right|_{w=w^{0}, b=b^{0}}
η\eta就是學習率。
就是通過上面的不斷微分更新得到w和b。

3.1梯度下降代碼

import numpy as np

np.random.seed(1)
x = np.linspace(0,10,10)
y_label = 2*x +3

def gradient_descent(x, y ,w, b):
    time = 0
    n=0.0001
    w = np.random.randn(1,1)
	b = np.random.randn(1,1)
    loss = np.sum((y - (w*x + b))**2)
    while(loss>0.01)or(time<10000):
        graident_w = np.sum((y - (w*x + b))*(x))
        graident_b = np.sum(y - (w*x + b))
        w = w - n*graident_w
        b = b - n*graident_b
        loss = np.sum((y - (w*x + b))**2)
        print(loss)
    return w, b
    
w_u, b_u = gradient_descent(x, y_label, w, b)

在這裏插入圖片描述
你會發現後面很難收斂,不怕我有一招,這招下次再說

四. 學習L2-Norm,L1-Norm,L0-Norm

4.1推導正則化公式

min1Ni=1NL(yi,f(xi))+λJ(f) \min \frac{1}{N} \sum_{i=1}^{N} L\left(y_{i}, f\left(x_{i}\right)\right)+\lambda J(f)
一般來說,監督學習可以看成最小化下面的目標函數,其中第一項就是L(yi,f(xi;w))L\left(y_{i}, f\left(x_{i} ; w\right)\right)就是誤差平方和,第二項是懲罰項,對引數w的規則化函式J(f)J(f)遷移約束模型儘可能簡單。
一般有三種範式:
L0L_0範數是指向量中非0的元素個數。如果我們用L_0$範數來規則化一個引數矩陣w的話,就是希望w的大部分元素都是0,也就是稀疏。
j=1,θj0mθj0\sum_{j=1, \theta_{j} \neq 0}^{m} \theta_{j}^{0}
L1L_1範數是指向量中各個元素絕對值之和,也就是我們常說的Lasso regularization
j=1mθj \sum_{j=1}^{m}\left|\theta_{j}\right|
L2L_2範數是指向量中各個元素平方之和,也就是我們常說的Ridge regularization
j=1mθj2 \sum_{j=1}^{m} \theta_{j}^{2}
其中爲什麼叫L0,L1,L2L_0,L_1,L2
L(θ)=j=1m(θj2)p L(\theta)=\sum_{j=1}^{m}\left(\sqrt{\theta_{j}^{2}}\right)^{p}
而根據p的大小來決定是0,1,2。

4.2說明爲什麼用L1-Norm代替L0-Norm

L1L_1L0L_0都可以實現稀疏,但是L1L_1L0L_0具有更好的優化求解特性而被廣泛應用。

4.1學習爲什麼只對w/Θ做限制,不對b做限制

因爲w通常是一個高維參數矢量,w幾乎涵蓋了所有參數,b只是衆多參數的中的一個,這樣加上b來做regularization的作用不大,也可以加,只是作用不大

參考文獻

https://zhuanlan.zhihu.com/p/22505062

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章