1. 程式人生 > >深度學習—加快梯度下降收斂速度(一):mini-batch、Stochastic gradient descent

深度學習—加快梯度下降收斂速度(一):mini-batch、Stochastic gradient descent

在深層神經網路那篇部落格中講了,深層神經網路的區域性最優解問題,深層神經網路中存在區域性極小點的可能性比較小,大部分是鞍點。因為鞍面上的梯度接近於0,在鞍面上行走是非常緩慢的。因此,必須想辦法加速收斂速度,使其更快找到全域性最優解。本文將介紹mini-batch與Stochastic gradient descent方法。

這裡寫圖片描述

1.mini-batch

之前的梯度下降法是將訓練集所有的梯度計算之後,再更新引數,這樣大部分時間浪費在計算梯度上。而mini-batch是將訓練集分組,分組之後,分別對每組求梯度,然後更新引數。加入分 8組,則每次迭代將會做8次梯度下降,更新8次引數。所以mini-batch比傳統的梯度下降法下降的速度快,但是mini-batch的cost曲線沒有傳統梯度下降法的cost曲線光滑,大致對比如下:

梯度下降過程
這裡寫圖片描述

mini-batch下降過程
這裡寫圖片描述

mini-batch實現步驟:

  • 確定mini-batch size,一般有32、64、128等,按自己的資料集而定,確定mini-batch_num=m/mini-batch_num + 1;
  • 在分組之前將原資料集順序打亂,隨機打亂;
  • 分組,將打亂後的資料集分組;
  • 將分好後的mini-batch組放進迭代迴圈中,每次迴圈都做mini-batch_num次梯度下降。

2.Stochastic gradient descent

Stochastic gradient descent可以看做是mini-batch的一種特殊情況,當mini-batch size等於1時,mini-batch就退化為Stochastic gradient descent。此時每次迭代中,對於資料集中每個樣本都做一次梯度下降,其梯度下降過程大致如下所示:

這裡寫圖片描述

從Stochastic gradient descent的梯度下降圖可以看出,下降速度雖然比傳統梯度下降速度快,但是曲線比較曲折,沒有mini-batch的曲線直,因此,多數情況下會使用mini-batch。

3.三者優缺點對比

  • Stochastic gradient descent無法利用向量化,並行運算受限,mini-batch和batch gradient decent可以利用向量化,有並行運算優勢;
  • Stochastic gradient descent很難收斂到最優點,mini-batch和batch gradient decent可以收斂到最優點;
  • Stochastic gradient descent和mini-batch收斂速度快,batch gradient decent收斂速度慢。

Stochastic gradient descent Python原始碼:

X = data_input
Y = labels
parameters = initialize_parameters(layers_dims)
for i in range(0, num_iterations):
    for j in range(0, m):
        # Forward propagation
        a, caches = forward_propagation(X[:,j], parameters)
        # Compute cost
        cost = compute_cost(a, Y[:,j])
        # Backward propagation
        grads = backward_propagation(a, caches, parameters)
        # Update parameters.
        parameters = update_parameters(parameters, grads)

mini-batch python 原始碼:

def random_mini_batches(X, Y, mini_batch_size = 64, seed = 0):
    """
    Creates a list of random minibatches from (X, Y)

    Arguments:
    X -- input data, of shape (input size, number of examples)
    Y -- true "label" vector (1 for blue dot / 0 for red dot), of shape (1, number of examples)
    mini_batch_size -- size of the mini-batches, integer

    Returns:
    mini_batches -- list of synchronous (mini_batch_X, mini_batch_Y)
    """

    np.random.seed(seed)            # To make your "random" minibatches the same as ours
    m = X.shape[1]                  # number of training examples
    mini_batches = []

    # Step 1: Shuffle (X, Y)
    permutation = list(np.random.permutation(m))
    shuffled_X = X[:, permutation]
    shuffled_Y = Y[:, permutation].reshape((1,m))

    # Step 2: Partition (shuffled_X, shuffled_Y). Minus the end case.
    num_complete_minibatches = int(math.floor(m/mini_batch_size)) # number of mini batches of size mini_batch_size in your partitionning
    for k in range(0, num_complete_minibatches):
        ### START CODE HERE ### (approx. 2 lines)
        mini_batch_X = shuffled_X[:, k * mini_batch_size:(k + 1) * mini_batch_size]
        mini_batch_Y = shuffled_Y[:, k * mini_batch_size:(k + 1) * mini_batch_size]
        ### END CODE HERE ###
        mini_batch = (mini_batch_X, mini_batch_Y)
        mini_batches.append(mini_batch)

    # Handling the end case (last mini-batch < mini_batch_size)
    if m % mini_batch_size != 0:
        ### START CODE HERE ### (approx. 2 lines)
        mini_batch_X = shuffled_X[:, (k + 1) * mini_batch_size:m]
        mini_batch_Y = shuffled_Y[:, (k + 1) * mini_batch_size:m]
        ### END CODE HERE ###
        mini_batch = (mini_batch_X, mini_batch_Y)
        mini_batches.append(mini_batch)

    return mini_batches

相關推薦

深度學習加快梯度下降收斂速度mini-batchStochastic gradient descent

在深層神經網路那篇部落格中講了,深層神經網路的區域性最優解問題,深層神經網路中存在區域性極小點的可能性比較小,大部分是鞍點。因為鞍面上的梯度接近於0,在鞍面上行走是非常緩慢的。因此,必須想辦法加速收斂速度,使其更快找到全域性最優解。本文將介紹mini-batch

深度學習加快梯度下降收斂速度MonmentumRMSpropAdam

上篇部落格講的是利用處理(分組資料集)訓練資料集的方法,加快梯度下降法收斂速度,本文將介紹如何通過處理梯度的方法加快收斂速度。首先介紹Monmentum,再次介紹RMSprop,最後介紹兩種演算法的綜合體Adam。 1.Monmentum 在介紹Monmen

深度學習筆記——理論與推導之概念,成本函式與梯度下降演算法初識

前情提要 一、神經網路介紹 概念:Learning ≈ Looking for a Function 框架(Framework): What is Deep Learning? 深度學習其實就是一個定義方法、判斷方法優劣、挑選最佳的方法的過程:

深度學習的異構加速技術螺獅殼裏做道場

篩選 分享 intel 支持 get 更多 wid efficient 優勢 作者簡介:kevinxiaoyu,高級研究員,隸屬騰訊TEG-架構平臺部,主要研究方向為深度學習異構計算與硬件加速、FPGA雲、高速視覺感知等方向的構架設計和優化。“深度學習的異構加速技術”系列

基於深度學習的目標檢測演算法綜述截止20180821

參考:https://zhuanlan.zhihu.com/p/40047760 目標檢測(Object Detection)是計算機視覺領域的基本任務之一,學術界已有將近二十年的研究歷史。近些年隨著深度學習技術的火熱發展,目標檢測演算法也從基於手工特徵的傳統演算法轉向了基於深度神經網路的檢測技

深度學習上的超解析度認知

從本質上對深度學習和超解析度進行梳理 溫故而知新 超解析度 作為處理影象的其中一個問題,和它同一個層次的還有降噪(Denoising),抗模糊(Deblurring),缺失修復(Inpainting)。難度(相對的)也是依次遞增的。傳統觀念上講,他們每一個的處理方式都有各自專門的

基於深度學習的目標檢測演算法綜述

前言 目標檢測(Object Detection)是計算機視覺領域的基本任務之一,學術界已有將近二十年的研究歷史。近些年隨著深度學習技術的火熱發展,目標檢測演算法也從基於手工特徵的傳統演算法轉向了基於深度神經網路的檢測技術。從最初2013年提出的R-CNN、OverFeat

三維深度學習之pointnet系列詳解

三維深度學習之pointnet系列詳解(一) 置頂 2018年05月09日 23:25:06 痛並快樂著呦西 閱讀數:4429 標籤: pointnet 三維深度學習 更多 個人分類: 3D Deep Learning

.NET深度學習框架ML.NET入門筆記

ML.NET入門筆記 ML.NET機器學習框架是基於.NET core 2.x的,所以我們必須安裝.net core 2.x,然後順便安裝vs2017便於開發 1.建立專案 此例我們建立一個控制檯應用myApp,建立之後使用Nuget安裝 Mi

深度學習/機器學習入門基礎數學知識整理線性代數基礎,矩陣,範數等

前面大概有2年時間,利用業餘時間斷斷續續寫了一個機器學習方法系列,和深度學習方法系列,還有一個三十分鐘理解系列(一些趣味知識);新的一年開始了,今年給自己定的學習目標——以補齊基礎理論為重點,研究一些基礎課題;同時逐步繼續寫上述三個系列的文章。 最近越來越多的

深度學習之正則化系列2資料集增強資料增廣

讓機器學習模型泛化得更好的最好辦法是使用更多的資料進行訓練。當然,在實踐中,我們擁有的資料量是很有限的。解決這個問題的一種方法是建立假資料並新增到訓練集中。對於一些機器學習任務,建立新的假資料相當簡單。對分類來說這種方法是最簡單的。分類器需要一個複雜的高維輸入

加快首屏渲染速度——抽取critical CSS

核心思路: 一、抽取出首頁需要的css 二、用行內css形式載入這部分css(critical css) 三、等到頁面載入完之後,再載入整個css,會有一部分css與critical css重疊 示例 內嵌關鍵的CSS,具體方法如下: 注意 <link>

深度學習的異構加速技術螺獅殼裡做道場

作者簡介:kevinxiaoyu,高階研究員,隸屬騰訊TEG-架構平臺部,主要研究方向為深度學習異構計算與硬體加速、FPGA雲、高速視覺感知等方向的構架設計和優化。“深度學習的異構加速技術”系列共有三篇文章,主要在技術層面,對學術界和工業界異構加速的構架演

深度學習】Inception的前世今生--GoogLeNet

在2014年ILSVRC比賽上,GoogleNet 用了僅僅是AlexNet的12%的引數量,卻拿到了分類top-5的第一名。在之前的深度學習網路的設計中,會存在兩個重要缺陷: 1) 更深更寬的網路模型會產生巨量引數 2) 網路規模的加大會極大的增加計算

[linux][MongoDB] mongodb學習MongoDB安裝管理工具

ole ont mon mkdir man 管理工具 tar end 認證 參考原文:http://www.cnblogs.com/kaituorensheng/p/5118226.html linux安裝完美實現! 1. mongoDB安裝、啟動、關閉   1.1

機器學習之支持向量機支持向量機的公式推導

根據 監督式 art 通用 利用 哪些 這就是 在線 方法 註:關於支持向量機系列文章是借鑒大神的神作,加以自己的理解寫成的;若對原作者有損請告知,我會及時處理。轉載請標明來源。 序: 我在支持向量機系列中主要講支持向量機的公式推導,第一部分講到推出拉格朗日對偶函數的對偶因

周志華《機器學習》課後習題解答系列目錄

對機器學習一直很感興趣,也曾閱讀過李航老師的《統計學習導論》和Springer的《統計學習導論-基於R應用》等相關書籍,但總感覺自己缺乏深入的理解和系統的實踐。最近從實驗室角落覓得南京大學周志華老師《機器學習》一書,隨意翻看之間便被本書內容文筆深深吸引,如獲至寶

《機器學習學習筆記線性迴歸邏輯迴歸

    本筆記主要記錄學習《機器學習》的總結體會。如有理解不到位的地方,歡迎大家指出,我會努力改正。     在學習《機器學習》時,我主要是通過Andrew Ng教授在mooc上提供的《Machine Learning》課程,不得不說Andrew Ng老師在講授這門課程時,

Jenkins學習Jenkins安裝啟動外掛安裝

Jenkins安裝與基本配置 一、Jenkins安裝 在最簡單的情況下,Jenkins 只需要兩個步驟: 可以直接wget +下載地址下載 或者網站直接下載到windows機器上,然後通過ssh工具連線伺服器通過rz命令上傳本地下載的wa

Retrofit2+RxJava學習小計單檔案多檔案上傳之填平的坑

從Eclipse轉戰AndroidStudio已經有兩個月了。先誇誇Google親兒子的強大吧,各種方便就不一一道來了。主要是現在的Android陣營已經不想前兩年了。各種開源框架開源庫。也正是如此,AndroidStudio匯入開源的專案非常方便。自從Goog