3.線性神經(jīng)網(wǎng)絡(luò) - 隨機(jī)梯度下降法

隨機(jī)梯度下降法:stochastic gradient descent

大綱

1. look --- 大數(shù)據(jù)情況遇到什么問題

2. write --- 隨機(jī)梯度下降法

3. code --- python


Large scale 帶來的問題

每次更新權(quán)值都要計算所有的數(shù)據(jù)點(diǎn)颁股,才能進(jìn)行一次更新
數(shù)據(jù)量大的情況下殷费,性能會很差

stochastic gradient descent

隨機(jī)梯度下降算法刃宵,相比批量梯度下降豹绪,它每讀到一個數(shù)據(jù)點(diǎn)刁绒,都會進(jìn)行一次權(quán)值更新

  • 好處:快,幾十萬的數(shù)據(jù)有可能在第幾千個的時候就會收斂
  • 壞處:因為是每個數(shù)據(jù)點(diǎn)都會更新權(quán)值,呢些離群點(diǎn)會對算法影響很大,算法噪聲大

解決方法

  1. 利用洗牌算法觅捆,每次迭代都用隨機(jī)序列防止循環(huán)
  2. 自適應(yīng)的學(xué)習(xí)率,a / (b + number of iteration)麻敌,a,b是常數(shù)栅炒,比固定的學(xué)習(xí)率有更大的機(jī)會達(dá)到最小誤差的收斂點(diǎn)

隨機(jī)梯度下降算法

由圖可見,由于是每個點(diǎn)都進(jìn)行權(quán)值更新,在算法初期收斂速度很快赢赊,又因為是自適應(yīng)的學(xué)習(xí)率乙漓,越接近最小無差點(diǎn),逼近速度越慢

誤差收斂圖

根據(jù)計算得到的分類平面如圖

分類平面示意圖
隨機(jī)梯度很適合在線學(xué)習(xí)释移,因為它不需要所有的訓(xùn)練點(diǎn)就可以進(jìn)行模型訓(xùn)練叭披。同時更加節(jié)約內(nèi)存

Code!P惚蕖趋观!

from numpy.random import seed
class AdalineSGD(object):

    # --------  參數(shù)  --------#
    # 參數(shù)1   eta:float   學(xué)習(xí)率
    # 參數(shù)2   n_iter:int  循環(huán)次數(shù)
    # --------  屬性  --------#
    # 屬性1   w_:1d_array         擬合后權(quán)值
    # 屬性2   errors_:list        每次迭代的錯誤分類
    # 屬性3   shuffles:bool       每次迭代時候打亂順序
    # 屬性4   random_state:int    設(shè)置循環(huán)狀態(tài),初始化權(quán)值

    # 初始化
    def __init__(self,eta=0.01,n_iter=10,shuffle=True,random_state=None):
        self.eta = eta
        self.n_iter = n_iter
        self.shuffle = shuffle
        self.w_initialized = False
        if(random_state):
            seed(random_state)

    # 訓(xùn)練模型
    def fit(self,X,y):
        self._initialize_weights(X.shape[1])
        self.cost_ = []
        for i in range(self.n_iter):
            if(self.shuffle):
                X,y = self._shuffle(X,y)
            cost = []
            for xi ,target in zip(X,y):
                cost.append(self._update_weights(xi,target))
            avg_cost = sum(cost)/len(y)
            self.cost_.append(avg_cost)
        return self

    # 不初始化權(quán)值進(jìn)行對訓(xùn)練數(shù)據(jù)進(jìn)行擬合
    def partial_fit(self,X,y):
        if not self.w_initialized:
            self._initialize_weights(X.shape[1])
        if y.ravel().shapr[0] > 1:
            for xi,target in zip(X,y):
                self._update_weights(xi,target)
        else:
            self._update_weights(X,y)
        return self

    # 輸入和權(quán)值的點(diǎn)積,即公式的z函數(shù),圖中的net_input
    def net_input(self,X):
        return np.dot(X,self.w_[1:]) + self.w_[0]

    # 線性激活函數(shù)
    def activation(self,X):
        return self.net_input(X)

    # 利用階躍函數(shù)返回分類標(biāo)簽
    def predict(self,X):
        return np.where(self.activation(X)>=0.0,1,-1)

    # 對數(shù)據(jù)進(jìn)行隨機(jī)打亂
    def _shuffle(self,X,y):
        r = np.random.permutation(len(y)) # 隨機(jī)索引值
        return X[r],y[r]

    # 初始化權(quán)值向量
    def _initialize_weights(self,m):
        self.w_ = np.zeros(1+m)
        self.w_initialized = True

    # 應(yīng)用自適應(yīng)線性神經(jīng)網(wǎng)絡(luò)更新權(quán)值
    def _update_weights(self,xi,target):
        output = self.net_input(xi)
        error = (target-output)
        self.w_[1:] += self.eta * xi.dot(error)
        self.w_[0] += self.eta * error
        cost = 0.5 * error ** 2
        return cost
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市锋边,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌编曼,老刑警劉巖豆巨,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異掐场,居然都是意外死亡往扔,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進(jìn)店門熊户,熙熙樓的掌柜王于貴愁眉苦臉地迎上來萍膛,“玉大人,你說我怎么就攤上這事嚷堡』嚷蓿” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵蝌戒,是天一觀的道長串塑。 經(jīng)常有香客問我,道長北苟,這世上最難降的妖魔是什么桩匪? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮友鼻,結(jié)果婚禮上傻昙,老公的妹妹穿的比我還像新娘。我一直安慰自己彩扔,他們只是感情好妆档,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著借杰,像睡著了一般过吻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天纤虽,我揣著相機(jī)與錄音乳绕,去河邊找鬼。 笑死逼纸,一個胖子當(dāng)著我的面吹牛洋措,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播杰刽,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼菠发,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了贺嫂?” 一聲冷哼從身側(cè)響起滓鸠,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎第喳,沒想到半個月后糜俗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡曲饱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年悠抹,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扩淀。...
    茶點(diǎn)故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡楔敌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出驻谆,到底是詐尸還是另有隱情卵凑,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布旺韭,位于F島的核電站氛谜,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏区端。R本人自食惡果不足惜值漫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望织盼。 院中可真熱鬧杨何,春花似錦、人聲如沸沥邻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽唐全。三九已至埃跷,卻和暖如春蕊玷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背弥雹。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工垃帅, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人剪勿。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓贸诚,卻偏偏與公主長得像,于是被迫代替她去往敵國和親厕吉。 傳聞我的和親對象是個殘疾皇子酱固,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容