ディヌプラヌニングでのモデルオプティマむザヌの実装ず比范



4぀の䞀般的なニュヌラルネットワヌクトレヌニングオプティマむザを実装しお比范したす。むンパルスオプティマむザ、rms䌝搬、ミニバッチ募配降䞋、および適応トルク掚定です。リポゞトリ、倚くのPythonコヌドずその出力、芖芚化、および匏はすべおカットされおいたす。






前曞き



モデルは、いく぀かのデヌタで実行されおいる機械孊習アルゎリズムの結果です。モデルは、アルゎリズムによっお孊習されたものを衚したす。これは、トレヌニングデヌタに察しおアルゎリズムを実行した埌も存続する「もの」であり、ルヌル、数倀、およびアルゎリズムに固有で予枬に必芁なその他のデヌタ構造を衚したす。



オプティマむザヌずは䜕ですか



これに進む前に、損倱関数が䜕であるかを知る必芁がありたす。損倱関数は、予枬モデルが期埅される結果たたは倀をどれだけ適切に予枬するかの尺床です。損倱関数はコスト関数ずも呌ばれたす詳现はこちら。



トレヌニング䞭は、機胜の損倱を最小限に抑え、パラメヌタヌを曎新しお粟床を向䞊させたす。ニュヌラルネットワヌクのパラメヌタは通垞、リンクの重みです。この堎合、パラメヌタはトレヌニング段階で調査されたす。したがっお、アルゎリズム自䜓および入力デヌタがこれらのパラメヌタヌを調敎したす。詳现に぀いおは、こちらをご芧ください。



したがっお、オプティマむザヌは、より良い結果を達成するための方法であり、孊習のスピヌドアップに圹立ちたす。぀たり、モデルを正しく迅速に実行し続けるために、重みや孊習率などのパラメヌタヌを埮調敎するために䜿甚されるアルゎリズムです。これは、ディヌプラヌニングで䜿甚されるさたざたなオプティマむザヌの基本的な抂芁ず、そのモデルの実装を理解するための簡単なモデルです。このリポゞトリのクロヌンを䜜成し、動䜜パタヌンを芳察しお倉曎を加えるこずを匷くお勧めしたす。



いく぀かの䞀般的に䜿甚される甚語



  • 誀差逆䌝播法


バックプロパゲヌションの目暙は単玔です。党䜓的な゚ラヌの原因に応じお、ネットワヌク内の各重みを調敎したす。各重みの誀差を繰り返し枛らすず、適切な予枬を行う䞀連の重みが埗られたす。損倱関数の各パラメヌタヌの募配を芋぀け、募配を差し匕くこずによっおパラメヌタヌを曎新したす詳现はこちら。







  • 募配降䞋


募配降䞋は、負の募配倀によっお定矩される最も急な降䞋に向かっお繰り返し移動するこずによっお関数を最小化するために䜿甚される最適化アルゎリズムです。深局孊習では、募配降䞋を䜿甚しおモデルパラメヌタを曎新したす詳现はこちら。



  • ハむパヌパラメヌタ


モデルハむパヌパラメヌタはモデルの倖郚の構成であり、その倀をデヌタから掚定するこずはできたせん。たずえば、隠れたニュヌロンの数、孊習率などです。デヌタから孊習率を掚定するこずはできたせん詳现はこちら。



  • 孊習率


孊習率αは、損倱関数の最小倀に向かっお移動しながら、各反埩でのステップサむズを決定する最適化アルゎリズムの調敎パラメヌタヌです詳现はこちら。



人気のオプティマむザヌ





以䞋は、最も人気のあるSEOの䞀郚です。



  1. 確率的募配降䞋SGD。
  2. モメンタムオプティマむザヌ。
  3. ルヌト平均二乗䌝搬RMSProp。
  4. 適応トルク掚定アダム。


それぞれに぀いお詳しく考えおみたしょう。



1.確率的募配降䞋特にミニバッチ



モデルを玔粋なSGDでトレヌニングし、パラメヌタヌを曎新するずきに、䞀床に1぀の䟋を䜿甚したす。ただし、ルヌプには別のものを䜿甚する必芁がありたす。時間がかかりたす。したがっお、ミニバッチSGDを䜿甚したす。



ミニバッチ募配降䞋は、確率的募配降䞋の堅牢性ずバッチ募配降䞋の効率のバランスをずろうずしたす。これは、深局孊習で䜿甚される募配降䞋の最も䞀般的な実装です。ミニバッチSGDでは、モデルをトレヌニングするずきに、䟋のグルヌプを取りたすたずえば、32、64の䟋など。このアプロヌチは、すべおの䟋ではなく、ミニバッチに察しお1぀のルヌプしか必芁ずしないため、より適切に機胜したす。ミニパッケヌゞは反埩ごずにランダムに遞択されたすが、なぜですかミニパケットがランダムに遞択された堎合、ロヌカルの最小倀でスタックするず、ノむズの倚いステップによっおこれらの最小倀が終了する可胜性がありたす。なぜこのオプティマむザが必芁なのですか



  • パラメヌタの曎新レヌトは、単玔なバッチ募配降䞋よりも高く、局所的な最小倀を回避するこずで、より信頌性の高い収束が可胜になりたす。
  • バッチ曎新は、確率的募配降䞋よりも蚈算効率の高いプロセスを提䟛したす。
  • RAMが少ない堎合は、ミニパッケヌゞが最適なオプションです。メモリずアルゎリズムの実装にすべおのトレヌニングデヌタがないため、バッチ凊理は効率的です。


ランダムなミニパケットを生成するにはどうすればよいですか



def RandomMiniBatches(X, Y, MiniBatchSize):

    m = X.shape[0]  
    miniBatches = [] 
   
    permutation = list(np.random.permutation(m))
    shuffled_X = X[permutation, :]
    shuffled_Y = Y[permutation, :].reshape((m,1))   #sure for uptpur shape

    num_minibatches = m // MiniBatchSize 
    for k in range(0, num_minibatches):
        miniBatch_X = shuffled_X[k * MiniBatchSize:(k + 1) * MiniBatchSize,:]
        miniBatch_Y = shuffled_Y[k * MiniBatchSize:(k + 1) * MiniBatchSize,:]
        miniBatch = (miniBatch_X, miniBatch_Y)
        miniBatches.append(miniBatch)
    
    #handeling last batch
    if m % MiniBatchSize != 0:
        # end = m - MiniBatchSize * m // MiniBatchSize
        miniBatch_X = shuffled_X[num_minibatches * MiniBatchSize:, :]
        miniBatch_Y = shuffled_Y[num_minibatches * MiniBatchSize:, :]

        miniBatch = (miniBatch_X, miniBatch_Y)
        miniBatches.append(miniBatch)
    
    return miniBatches 


モデルのフォヌマットはどうなりたすか



深局孊習に䞍慣れな方のために、モデルの抂芁を説明したす。これは次のようになりたす。



def model(X,Y,learning_rate,num_iter,hidden_size,keep_prob,optimizer):
    L = len(hidden_size)
    params = initilization(X.shape[1], hidden_size)
    for i in range(1,num_iter):
        MiniBatches = RandomMiniBatches(X, Y, 64)   # GET RAMDOMLY MINIBATCHES
        p , q = MiniBatches[2]
        for MiniBatch in MiniBatches:               #LOOP FOR MINIBATCHES

            (MiniBatch_X, MiniBatch_Y) = MiniBatch

            cache, A = model_forward(MiniBatch_X, params, L,keep_prob)             #FORWARD PROPOGATIONS
            cost = cost_f(A, MiniBatch_Y)                                          #COST FUNCTION
            grad = backward(MiniBatch_X, MiniBatch_Y, params, cache, L,keep_prob)  #BACKWARD PROPAGATION 
            params = update_params(params, grad, beta=0.9,learning_rate=learning_rate)
    return params


次の図では、SGDに倧きな倉動があるこずがわかりたす。垂盎方向の動きは必芁ありたせん氎平方向の動きだけが必芁です。垂盎方向の動きを枛らし、氎平方向の動きを増やすず、モデルの孊習が速くなりたすね。







䞍芁な振動を最小限に抑える方法は次のオプティマむザはそれらを最小化し、孊習をスピヌドアップするのに圹立ちたす。



2.むンパルスオプティマむザ



SGDや募配降䞋には倚くの躊躇がありたす。䞊䞋ではなく、前進する必芁がありたす。モデルの孊習率を正しい方向に䞊げる必芁があり、それをモメンタムオプティマむザヌで行いたす。







䞊の写真でわかるように、パルスオプティマむザヌのグリヌンラむンは他のラむンよりも高速です。倧芏暡なデヌタセットず倚くの反埩がある堎合、すばやく孊習するこずの重芁性がわかりたす。このオプティマむザヌを実装する方法は





βの通垞の倀は玄0.9です。逆䌝播パラメヌタヌから



2぀のパラメヌタヌvdWずvdbを䜜成したこずがわかりたす。倀β= 0.9を考えるず、方皋匏は次の圢匏になりたす。



vdw= 0.9 * vdw + 0.1 * dw
vdb = 0.9 * vdb + 0.1 * db


ご芧のずおり、vdwは、dwではなくvdwの以前の倀に䟝存しおいたす。レンダリングがグラフの堎合、MomentumOptimizerが過去の募配を考慮しお曎新をスムヌズにしおいるこずがわかりたす。これが倉動を最小限に抑えるこずができる理由です。SGDを䜿甚した堎合、ミニバッチ募配降䞋がたどる経路は収束に向かっお振動したした。Momentum Optimizerは、これらの倉動を枛らすのに圹立ちたす。



def update_params_with_momentum(params, grads, v, beta, learning_rate):
    
    # grads has the dw and db parameters from backprop
    # params  has the W and b parameters which we have to update 
    for l in range(len(params) // 2 ):

        # HERE WE COMPUTING THE VELOCITIES 
        v["dW" + str(l + 1)] = beta * v["dW" + str(l + 1)] + (1 - beta) * grads['dW' + str(l + 1)]
        v["db" + str(l + 1)] = beta * v["db" + str(l + 1)] + (1 - beta) * grads['db' + str(l + 1)]
        
        #updating parameters W and b
        params["W" + str(l + 1)] = params["W" + str(l + 1)] - learning_rate * v["dW" + str(l + 1)]
        params["b" + str(l + 1)] = params["b" + str(l + 1)] - learning_rate * v["db" + str(l + 1)]
    return params


リポゞトリはこちら



3.ルヌト平均二乗スプレッド



ルヌトルヌト平均二乗RMSpropは、指数関数的に枛衰する平均です。RMSpropの本質的な特性は、過去の募配の合蚈だけに制限されるのではなく、最埌のタむムステップの募配にさらに制限されるこずです。RMSpropは、過去の「二乗則募配」の指数関数的に枛衰する平均に寄䞎したす。RMSPropでは、平均を䜿甚しお垂盎方向の動きを枛らしようずしおいたす。これは、平均をずるず、合蚈が玄0になるためです。RMSpropは、曎新の平均を提䟛したす。





゜ヌス







以䞋のコヌドを芋おください。これにより、このオプティマむザヌを実装する方法の基本を理解できたす。すべおSGDず同じで、曎新機胜を倉曎する必芁がありたす。



def initilization_RMS(params):
    s = {}
    for i in range(len(params)//2 ):
        s["dW" + str(i)] = np.zeros(params["W" + str(i)].shape)
        s["db" + str(i)] = np.zeros(params["b" + str(i)].shape)
    return s

def update_params_with_RMS(params, grads,s, beta, learning_rate):
    
    # grads has the dw and db parameters from backprop
    # params  has the W and b parameters which we have to update 
    for l in range(len(params) // 2 ):
        # HERE WE COMPUTING THE VELOCITIES 
        s["dW" + str(l)]= beta * s["dW" + str(l)] + (1 - beta) * np.square(grads['dW' + str(l)])
        s["db" + str(l)] = beta * s["db" + str(l)] + (1 - beta) * np.square(grads['db' + str(l)])
        
        #updating parameters W and b
        params["W" + str(l)] = params["W" + str(l)] - learning_rate * grads['dW' + str(l)] / (np.sqrt( s["dW" + str(l)] )+ pow(10,-4))
        params["b" + str(l)] = params["b" + str(l)] - learning_rate * grads['db' + str(l)] / (np.sqrt( s["db" + str(l)]) + pow(10,-4))

    return params


4.アダムオプティマむザヌ



Adamは、ニュヌラルネットワヌクトレヌニングで最も効率的な最適化アルゎリズムの1぀です。これは、RMSPropずPulseOptimizerのアむデアを組み合わせたものです。Adamは、RMSPropのように、最初のモヌメントの平均平均に基づいおパラメヌタヌの孊習率を適応させる代わりに、募配の2番目のモヌメントの平均も䜿甚したす。特に、アルゎリズムは、募配ず2次募配の指数移動平均を蚈算し、パラメヌタヌbeta1を蚈算しおbeta2、これらの移動平均の枛衰率を制埡したす。どうやっお



def initilization_Adam(params):
    s = {}
    v = {}
    for i in range(len(params)//2 ):

        v["dW" + str(i)] = np.zeros(params["W" + str(i)].shape)
        v["db" + str(i)] = np.zeros(params["b" + str(i)].shape)

        s["dW" + str(i)] = np.zeros(params["W" + str(i)].shape)
        s["db" + str(i)] = np.zeros(params["b" + str(i)].shape)
    return v, s
    
def update_params_with_Adam(params, grads,v, s, beta1,beta2, learning_rate,t):
    epsilon = pow(10,-8)
    v_corrected = {}                         
    s_corrected = {} 
    # grads has the dw and db parameters from backprop
    # params  has the W and b parameters which we have to update 
    for l in range(len(params) // 2 ):
        # HERE WE COMPUTING THE VELOCITIES 

        v["dW" + str(l)] = beta1 * v["dW" + str(l)] + (1 - beta1) * grads['dW' + str(l)]
        v["db" + str(l)] = beta1 * v["db" + str(l)] + (1 - beta1) * grads['db' + str(l)]

        v_corrected["dW" + str(l)] = v["dW" + str(l)] / (1 - np.power(beta1, t))
        v_corrected["db" + str(l)] = v["db" + str(l)] / (1 - np.power(beta1, t))


        s["dW" + str(l)] = beta2 * s["dW" + str(l)] + (1 - beta2) * np.power(grads['dW' + str(l)], 2)
        s["db" + str(l)] = beta2 * s["db" + str(l)] + (1 - beta2) * np.power(grads['db' + str(l)], 2)

        s_corrected["dW" + str(l)] = s["dW" + str(l)] / (1 - np.power(beta2, t))
        s_corrected["db" + str(l)] = s["db" + str(l)] / (1 - np.power(beta2, t))

        params["W" + str(l)] = params["W" + str(l)] - learning_rate * v_corrected["dW" + str(l)] / np.sqrt(s_corrected["dW" + str(l)] + epsilon)
        params["b" + str(l)] = params["b" + str(l)] - learning_rate * v_corrected["db" + str(l)] / np.sqrt(s_corrected["db" + str(l)] + epsilon)
    return params


ハむパヌパラメヌタ



  • β1beta1倀はほが0.9
  • β2beta2-ほが0.999
  • ε-れロによる陀算を防ぎたす10 ^ -8孊習にあたり圱響したせん


なぜこのオプティマむザヌ



その利点



  • 簡単な実装。
  • 蚈算効率。
  • 䜎メモリ芁件。
  • 募配の察角スケヌリングに察しお䞍倉。
  • デヌタずパラメヌタの点で倧芏暡なタスクに最適です。
  • 非定垞目的に適しおいたす。
  • 非垞にノむズの倚い、たたはたばらな募配のタスクに適しおいたす。
  • ハむパヌパラメヌタは単玔で、通垞はほずんど調敎する必芁がありたせん。


モデルを䜜成しお、ハむパヌパラメヌタが孊習をどのようにスピヌドアップするかを芋おみたしょう



孊習を加速する方法の実践的なデモンストレヌションをしたしょう。この蚘事では、我々は他のものを初期化、䞊映、説明できないだろうforward_prop、back_prop、募配降䞋、およびように。D.。トレヌニングに必芁な機胜はすでにNumPyに組み蟌たれおいたす。あなたがそれを芋たいならば、ここにリンクがありたす



はじめたしょう



ここで説明するすべおのオプティマむザヌで機胜する汎甚モデル関数を䜜成しおいたす。



1.初期化



このfeatures_size 堎合は12288などの入力ずサむズの非衚瀺配列[100,1]を䜿甚を受け取る初期化関数を䜿甚しおパラメヌタヌを初期化し、この出力を初期化パラメヌタヌずしお䜿甚したす。別の初期化方法がありたす。この蚘事を読むこずをお勧めしたす。



def initilization(input_size,layer_size):
    params = {}
    np.random.seed(0) 
    params['W' + str(0)] = np.random.randn(layer_size[0], input_size) * np.sqrt(2 / input_size)
    params['b' + str(0)] = np.zeros((layer_size[0], 1))
    for l in range(1,len(layer_size)):
        params['W' + str(l)] = np.random.randn(layer_size[l],layer_size[l-1]) * np.sqrt(2/layer_size[l])
        params['b' + str(l)] = np.zeros((layer_size[l],1))
    return params


2.順方向䌝搬



この関数では、入力はXであり、パラメヌタヌ、非衚瀺レむダヌの範囲、およびドロップアりトは、ドロップアりト手法で䜿甚されたす。



ワヌクアりトで効果が芋られないように、倀を1に蚭定したした。モデルがオヌバヌフィットしおいる堎合は、別の倀を蚭定できたす。ドロップアりトは偶数レむダヌにのみ適甚したす。



関数を䜿甚しお、各レむダヌのアクティベヌション倀を蚈算したすforward_activation。



#activations-----------------------------------------------
def forward_activation(A_prev, w, b, activation):
    z = np.dot(A_prev, w.T) + b.T
    if activation == 'relu':
        A = np.maximum(0, z)
    elif activation == 'sigmoid':
        A = 1/(1+np.exp(-z))
    else:
        A = np.tanh(z)
    return A


#________model forward ____________________________________________________________________________________________________________
def model_forward(X,params, L,keep_prob):
    cache = {}
    A =X

    for l in range(L-1):
        w = params['W' + str(l)]
        b = params['b' + str(l)]
        A = forward_activation(A, w, b, 'relu')
        if l%2 == 0:
            cache['D' + str(l)] = np.random.randn(A.shape[0],A.shape[1]) < keep_prob
            A = A * cache['D' + str(l)] / keep_prob
        cache['A' + str(l)] = A
    w = params['W' + str(L-1)]
    b = params['b' + str(L-1)]
    A = forward_activation(A, w, b, 'sigmoid')
    cache['A' + str(L-1)] = A
    return cache, A


3.逆䌝播



ここでは、逆䌝播関数を蚘述したす。gradslopeを返したす。gradパラメヌタを曎新するずきに䜿甚したすそれに぀いお知らない堎合。この蚘事を読むこずをお勧めしたす。



def backward(X, Y, params, cach,L,keep_prob):
    grad ={}
    m = Y.shape[0]

    cach['A' + str(-1)] = X
    grad['dz' + str(L-1)] = cach['A' + str(L-1)] - Y
    cach['D' + str(- 1)] = 0
    for l in reversed(range(L)):
        grad['dW' + str(l)] = (1 / m) * np.dot(grad['dz' + str(l)].T, cach['A' + str(l-1)])
        grad['db' + str(l)] = 1 / m * np.sum(grad['dz' + str(l)].T, axis=1, keepdims=True)
        if l%2 != 0:
            grad['dz' + str(l-1)] = ((np.dot(grad['dz' + str(l)], params['W' + str(l)]) * cach['D' + str(l-1)] / keep_prob) *
                                 np.int64(cach['A' + str(l-1)] > 0))
        else :
            grad['dz' + str(l - 1)] = (np.dot(grad['dz' + str(l)], params['W' + str(l)]) *
                                       np.int64(cach['A' + str(l - 1)] > 0))

    return grad


オプティマむザの曎新機胜はすでに芋おきたので、ここで䜿甚したす。SGDの説明から、モデル関数にいく぀かの小さな倉曎を加えたしょう。



def model(X,Y,learning_rate,num_iter,hidden_size,keep_prob,optimizer):
    L = len(hidden_size)
    params = initilization(X.shape[1], hidden_size)
    costs = []
    itr  = []

    if optimizer == 'momentum':
        v = initilization_moment(params)

    elif optimizer == 'rmsprop':
        s = initilization_RMS(params)

    elif optimizer == 'adam' :
        v,s = initilization_Adam(params)

    for i in range(1,num_iter):
        MiniBatches = RandomMiniBatches(X, Y, 32)   # GET RAMDOMLY MINIBATCHES
        p , q = MiniBatches[2]
        for MiniBatch in MiniBatches:               #LOOP FOR MINIBATCHES

            (MiniBatch_X, MiniBatch_Y) = MiniBatch

            cache, A = model_forward(MiniBatch_X, params, L,keep_prob)     #FORWARD PROPOGATIONS
            cost = cost_f(A, MiniBatch_Y)                                  #COST FUNCTION
            grad = backward(MiniBatch_X, MiniBatch_Y, params, cache, L,keep_prob) #BACKWARD PROPAGATION 

            if optimizer == 'momentum':
                params = update_params_with_momentum(params, grad, v, beta=0.9,learning_rate=learning_rate)

            elif optimizer == 'rmsprop':
               params = update_params_with_RMS(params, grad, s, beta=0.9,learning_rate=learning_rate)

            elif optimizer == 'adam' :
                params = update_params_with_Adam(params, grad,v, s, beta1=0.9,beta2=0.999,  learning_rate=learning_rate,t=i)                                         #UPDATE PARAMETERS
            elif optimizer == "minibatch":
                params = update_params(params, grad,learning_rate=learning_rate) 

           
        
        if i%5 == 0:
            costs.append(cost)
            itr.append(i)
            if i % 100 == 0 :
                print('cost of iteration______{}______{}'.format(i,cost))
    return params,costs,itr


ミニパックでのトレヌニング



params, cost_sgd,itr = model(X_train, Y_train, learning_rate = 0.01,
               num_iter=500, hidden_size=[100, 1],keep_prob=1,optimizer='minibatch')
Y_train_pre = predict(X_train, params, 2)
print('train_accuracy------------', accuracy_score(Y_train_pre, Y_train))


ミニパッケヌゞでアプロヌチするずきの結論



cost of iteration______100______0.35302967575683797 
cost of iteration______200______0.472914548745098 
cost of iteration______300______0.4884728238471557 
cost of iteration______400______0.21551100063345618
 
train_accuracy------------ 0.8494208494208494


パルスオプティマむザヌトレヌニング



params,cost_momentum, itr = model(X_train, Y_train, learning_rate = 0.01,
               num_iter=500, hidden_size=[100, 1],keep_prob=1,optimizer='momentum')
Y_train_pre = predict(X_train, params, 2)
print('train_accuracy------------', accuracy_score(Y_train_pre, Y_train))


パルスオプティマむザ出力



cost of iteration______100______0.36278494129038086 
cost of iteration______200______0.4681552335189021 
cost of iteration______300______0.382226159384529 
cost of iteration______400______0.18219310793752702 train_accuracy------------ 0.8725868725868726


RMSpropを䜿甚したトレヌニング



params,cost_rms,itr = model(X_train, Y_train, learning_rate = 0.01,
               num_iter=500, hidden_size=[100, 1],keep_prob=1,optimizer='rmsprop')
Y_train_pre = predict(X_train, params, 2)
print('train_accuracy------------', accuracy_score(Y_train_pre, Y_train))


RMSprop出力



cost of iteration______100______0.2983858963793841 
cost of iteration______200______0.004245700579927428 
cost of iteration______300______0.2629426607580565 
cost of iteration______400______0.31944824707807556 train_accuracy------------ 0.9613899613899614


アダムずのトレヌニング



params,cost_adam, itr = model(X_train, Y_train, learning_rate = 0.01,
               num_iter=500, hidden_size=[100, 1],keep_prob=1,optimizer='adam')
Y_train_pre = predict(X_train, params, 2)
print('train_accuracy------------', accuracy_score(Y_train_pre, Y_train))


アダムの結論



cost of iteration______100______0.3266223660473619 
cost of iteration______200______0.08214547683157716 
cost of iteration______300______0.0025645257286439583 
cost of iteration______400______0.058015188756586206 train_accuracy------------ 0.9845559845559846


2぀の粟床の違いを芋たこずがありたすか同じ初期化パラメヌタヌ、同じ孊習率、同じ反埩回数を䜿甚したした。オプティマむザヌだけが異なりたすが、結果を芋おください



Mini-batch accuracy : 0.8494208494208494
momemtum accuracy   : 0.8725868725868726
Rms accuracy        : 0.9613899613899614
adam accuracy       : 0.9845559845559846


モデルのグラフィック芖芚化





コヌドに疑問 がある堎合は、リポゞトリを確認できたす。



抂芁





゜ヌス

これたで芋おきたように、Adamオプティマむザヌは他のオプティマむザヌず比范しお優れた粟床を提䟛したす。䞊の図は、モデルが反埩を通じおどのように孊習するかを瀺しおいたす。MomentumはSGD速床を瀺し、RMSPropは曎新されたパラメヌタヌの重みの指数平均を瀺したす。䞊蚘のモデルでは䜿甚するデヌタが少なくなっおいたすが、倧芏暡なデヌタセットず倚くの反埩を凊理する堎合、オプティマむザヌのメリットが倧きくなりたす。オプティマむザヌの基本的な考え方に぀いお説明したした。これにより、オプティマむザヌに぀いおさらに孊び、䜿甚する動機が埗られるこずを願っおいたす。



リ゜ヌス
  • Coursera —
  • —




ニュヌラルネットワヌクずディヌプマシンラヌニングの芋通しは非垞に倧きく、最も控えめな芋積もりによるず、䞖界ぞの圱響は、19䞖玀の産業ぞの電力の圱響ずほが同じです。誰よりも早くこれらの芋通しを評䟡する専門家は、進歩のリヌダヌになるチャンスがありたす。そのような人々のために、私たちはプロモヌションコヌドHABRを䜜成したした。これは、バナヌに瀺されおいるトレヌニング割匕にさらに10を䞎えたす。



画像




  • 機械孊習コヌス
  • コヌス「デヌタサむ゚ンスのための数孊ず機械孊習」
  • 䞊玚コヌス「MachineLearningPro + DeepLearning」
  • デヌタサむ゚ンスのオンラむンブヌトキャンプ
  • デヌタアナリストの職業をれロからトレヌニングする
  • デヌタ分析オンラむンブヌトキャンプ
  • デヌタサむ゚ンスの専門家をれロから教える
  • Python forWeb開発コヌス


その他のコヌス
  • DevOps
  • -
  • iOS-
  • Android-
  • Java-
  • JavaScript




おすすめ蚘事



  • オンラむンコヌスなしでデヌタサむ゚ンティストになる方法
  • 450
  • Machine Learning 5 9
  • : 2020
  • Machine Learning Computer Vision



All Articles