• <sub id="pqc61"><p id="pqc61"></p></sub><sub id="pqc61"></sub>
    在线精品视频一区二区,亚洲中文字幕无码一久久区,正在播放肥臀熟妇在线视频,国内精品视频一区二区三区八戒 ,国产毛片三区二区一区,国产精品一区中文字幕,丰满少妇被猛烈进出69影院,国产成人无码
    您正在使用IE低版瀏覽器,為了您的雷峰網(wǎng)賬號(hào)安全和更好的產(chǎn)品體驗(yàn),強(qiáng)烈建議使用更快更安全的瀏覽器
    此為臨時(shí)鏈接,僅用于文章預(yù)覽,將在時(shí)失效
    人工智能開(kāi)發(fā)者 正文
    發(fā)私信給AI研習(xí)社
    發(fā)送

    1

    一文詳解神經(jīng)網(wǎng)絡(luò) BP 算法原理及 Python 實(shí)現(xiàn)

    本文作者: AI研習(xí)社 2017-05-26 10:02
    導(dǎo)語(yǔ):關(guān)于反向傳播。

    雷鋒網(wǎng)按:本文作者曾梓華,原文載于作者個(gè)人博客,雷鋒網(wǎng)已獲授權(quán)。

    最近這段時(shí)間系統(tǒng)性的學(xué)習(xí)了 BP 算法后寫(xiě)下了這篇學(xué)習(xí)筆記,因?yàn)槟芰τ邢蓿粲忻黠@錯(cuò)誤,還請(qǐng)指正。

      什么是梯度下降和鏈?zhǔn)角髮?dǎo)法則

    假設(shè)我們有一個(gè)函數(shù) J(w),如下圖所示。

    一文詳解神經(jīng)網(wǎng)絡(luò) BP 算法原理及 Python 實(shí)現(xiàn)

    梯度下降示意圖

    現(xiàn)在,我們要求當(dāng) w 等于什么的時(shí)候,J(w) 能夠取到最小值。從圖中我們知道最小值在初始位置的左邊,也就意味著如果想要使 J(w) 最小,w的值需要減小。而初始位置的切線的斜率a > 0(也即該位置對(duì)應(yīng)的導(dǎo)數(shù)大于0),w = w – a 就能夠讓 w 的值減小,循環(huán)求導(dǎo)更新w直到 J(w) 取得最小值。如果函數(shù)J(w)包含多個(gè)變量,那么就要分別對(duì)不同變量求偏導(dǎo)來(lái)更新不同變量的值。

    所謂的鏈?zhǔn)角髮?dǎo)法則,就是求復(fù)合函數(shù)的導(dǎo)數(shù):

    一文詳解神經(jīng)網(wǎng)絡(luò) BP 算法原理及 Python 實(shí)現(xiàn)

    鏈?zhǔn)角髮?dǎo)法則

    放個(gè)例題,會(huì)更加明白一點(diǎn):

    一文詳解神經(jīng)網(wǎng)絡(luò) BP 算法原理及 Python 實(shí)現(xiàn)

    鏈?zhǔn)角髮?dǎo)的例子

      神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)

    神經(jīng)網(wǎng)絡(luò)由三部分組成,分別是最左邊的輸入層,隱藏層(實(shí)際應(yīng)用中遠(yuǎn)遠(yuǎn)不止一層)和最右邊的輸出層。層與層之間用線連接在一起,每條連接線都有一個(gè)對(duì)應(yīng)的權(quán)重值 w,除了輸入層,一般來(lái)說(shuō)每個(gè)神經(jīng)元還有對(duì)應(yīng)的偏置 b。

    一文詳解神經(jīng)網(wǎng)絡(luò) BP 算法原理及 Python 實(shí)現(xiàn)

    神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)圖

    除了輸入層的神經(jīng)元,每個(gè)神經(jīng)元都會(huì)有加權(quán)求和得到的輸入值 z 和將 z 通過(guò) Sigmoid 函數(shù)(也即是激活函數(shù))非線性轉(zhuǎn)化后的輸出值 a,他們之間的計(jì)算公式如下

    一文詳解神經(jīng)網(wǎng)絡(luò) BP 算法原理及 Python 實(shí)現(xiàn)

    神經(jīng)元輸出值 a 的計(jì)算公式

    其中,公式里面的變量l和j表示的是第 l 層的第 j 個(gè)神經(jīng)元,ij 則表示從第 i 個(gè)神經(jīng)元到第 j 個(gè)神經(jīng)元之間的連線,w 表示的是權(quán)重,b 表示的是偏置,后面這些符號(hào)的含義大體上與這里描述的相似,所以不會(huì)再說(shuō)明。下面的 Gif 動(dòng)圖可以更加清楚每個(gè)神經(jīng)元輸入輸出值的計(jì)算方式(注意,這里的動(dòng)圖并沒(méi)有加上偏置,但使用中都會(huì)加上)

    一文詳解神經(jīng)網(wǎng)絡(luò) BP 算法原理及 Python 實(shí)現(xiàn)

    動(dòng)圖顯示計(jì)算神經(jīng)元輸出值

    使用激活函數(shù)的原因是因?yàn)榫€性模型(無(wú)法處理線性不可分的情況)的表達(dá)能力不夠,所以這里通常需要加入 Sigmoid 函數(shù)來(lái)加入非線性因素得到神經(jīng)元的輸出值。

    關(guān)于為什么線性函數(shù)模型表達(dá)能力不夠,可以點(diǎn)擊這里查看知乎上面的討論。

    一文詳解神經(jīng)網(wǎng)絡(luò) BP 算法原理及 Python 實(shí)現(xiàn)

    sigmoid 函數(shù)

    可以看到 Sigmoid 函數(shù)的值域?yàn)?(0,1) ,若對(duì)于多分類(lèi)任務(wù),輸出層的每個(gè)神經(jīng)元可以表示是該分類(lèi)的概率。當(dāng)然還存在其他的激活函數(shù),他們的用途和優(yōu)缺點(diǎn)也都各異。

      BP 算法執(zhí)行的流程(前向傳遞和逆向更新)

    在手工設(shè)定了神經(jīng)網(wǎng)絡(luò)的層數(shù),每層的神經(jīng)元的個(gè)數(shù),學(xué)習(xí)率 η(下面會(huì)提到)后,BP 算法會(huì)先隨機(jī)初始化每條連接線權(quán)重和偏置,然后對(duì)于訓(xùn)練集中的每個(gè)輸入 x 和輸出 y,BP 算法都會(huì)先執(zhí)行前向傳輸?shù)玫筋A(yù)測(cè)值,然后根據(jù)真實(shí)值與預(yù)測(cè)值之間的誤差執(zhí)行逆向反饋更新神經(jīng)網(wǎng)絡(luò)中每條連接線的權(quán)重和每層的偏好。在沒(méi)有到達(dá)停止條件的情況下重復(fù)上述過(guò)程。

    其中,停止條件可以是下面這三條

    ● 權(quán)重的更新低于某個(gè)閾值的時(shí)候

    ● 預(yù)測(cè)的錯(cuò)誤率低于某個(gè)閾值

    ● 達(dá)到預(yù)設(shè)一定的迭代次數(shù)

    譬如說(shuō),手寫(xiě)數(shù)字識(shí)別中,一張手寫(xiě)數(shù)字1的圖片儲(chǔ)存了28*28 = 784個(gè)像素點(diǎn),每個(gè)像素點(diǎn)儲(chǔ)存著灰度值(值域?yàn)閇0,255]),那么就意味著有784個(gè)神經(jīng)元作為輸入層,而輸出層有10個(gè)神經(jīng)元代表數(shù)字0~9,每個(gè)神經(jīng)元取值為0~1,代表著這張圖片是這個(gè)數(shù)字的概率。

    每輸入一張圖片(也就是實(shí)例),神經(jīng)網(wǎng)絡(luò)會(huì)執(zhí)行前向傳輸一層一層的計(jì)算到輸出層神經(jīng)元的值,根據(jù)哪個(gè)輸出神經(jīng)元的值最大來(lái)預(yù)測(cè)輸入圖片所代表的手寫(xiě)數(shù)字。

    然后根據(jù)輸出神經(jīng)元的值,計(jì)算出預(yù)測(cè)值與真實(shí)值之間的誤差,再逆向反饋更新神經(jīng)網(wǎng)絡(luò)中每條連接線的權(quán)重和每個(gè)神經(jīng)元的偏好。

    前向傳輸(Feed-Forward)

    從輸入層=>隱藏層=>輸出層,一層一層的計(jì)算所有神經(jīng)元輸出值的過(guò)程。

    逆向反饋(Back Propagation)

    因?yàn)檩敵鰧拥闹蹬c真實(shí)的值會(huì)存在誤差,我們可以用均方誤差來(lái)衡量預(yù)測(cè)值和真實(shí)值之間的誤差。

    一文詳解神經(jīng)網(wǎng)絡(luò) BP 算法原理及 Python 實(shí)現(xiàn)

    均方誤差

    逆向反饋的目標(biāo)就是讓E函數(shù)的值盡可能的小,而每個(gè)神經(jīng)元的輸出值是由該點(diǎn)的連接線對(duì)應(yīng)的權(quán)重值和該層對(duì)應(yīng)的偏好所決定的,因此,要讓誤差函數(shù)達(dá)到最小,我們就要調(diào)整w和b值, 使得誤差函數(shù)的值最小。

    一文詳解神經(jīng)網(wǎng)絡(luò) BP 算法原理及 Python 實(shí)現(xiàn)

    權(quán)重和偏置的更新公式

    對(duì)目標(biāo)函數(shù) E 求 w 和 b 的偏導(dǎo)可以得到 w 和 b 的更新量,下面拿求 w 偏導(dǎo)來(lái)做推導(dǎo)。

    一文詳解神經(jīng)網(wǎng)絡(luò) BP 算法原理及 Python 實(shí)現(xiàn)

    其中 η 為學(xué)習(xí)率,取值通常為 0.1 ~ 0.3,可以理解為每次梯度所邁的步伐。注意到 w_hj 的值先影響到第 j 個(gè)輸出層神經(jīng)元的輸入值a,再影響到輸出值y,根據(jù)鏈?zhǔn)角髮?dǎo)法則有:

    一文詳解神經(jīng)網(wǎng)絡(luò) BP 算法原理及 Python 實(shí)現(xiàn)

    使用鏈?zhǔn)椒▌t展開(kāi)對(duì)權(quán)重求偏導(dǎo)

    根據(jù)神經(jīng)元輸出值 a 的定義有:

    一文詳解神經(jīng)網(wǎng)絡(luò) BP 算法原理及 Python 實(shí)現(xiàn)

    對(duì)函數(shù) z 求 w 的偏導(dǎo)

    Sigmoid 求導(dǎo)數(shù)的式子如下,從式子中可以發(fā)現(xiàn)其在計(jì)算機(jī)中實(shí)現(xiàn)也是非常的方便:

    一文詳解神經(jīng)網(wǎng)絡(luò) BP 算法原理及 Python 實(shí)現(xiàn)

    Sigmoid 函數(shù)求導(dǎo)

    所以

    一文詳解神經(jīng)網(wǎng)絡(luò) BP 算法原理及 Python 實(shí)現(xiàn)

    則權(quán)重 w 的更新量為:

    一文詳解神經(jīng)網(wǎng)絡(luò) BP 算法原理及 Python 實(shí)現(xiàn)

    類(lèi)似可得 b 的更新量為:

    一文詳解神經(jīng)網(wǎng)絡(luò) BP 算法原理及 Python 實(shí)現(xiàn)

    但這兩個(gè)公式只能夠更新輸出層與前一層連接線的權(quán)重和輸出層的偏置,原因是因?yàn)?δ 值依賴(lài)了真實(shí)值y這個(gè)變量,但是我們只知道輸出層的真實(shí)值而不知道每層隱藏層的真實(shí)值,導(dǎo)致無(wú)法計(jì)算每層隱藏層的 δ 值,所以我們希望能夠利用 l+1 層的 δ 值來(lái)計(jì)算 l 層的 δ 值,而恰恰通過(guò)一些列數(shù)學(xué)轉(zhuǎn)換后可以做到,這也就是逆向反饋名字的由來(lái),公式如下:

    一文詳解神經(jīng)網(wǎng)絡(luò) BP 算法原理及 Python 實(shí)現(xiàn)

    從式子中我們可以看到,我們只需要知道下一層的權(quán)重和神經(jīng)元輸出層的值就可以計(jì)算出上一層的 δ 值,我們只要通過(guò)不斷的利用上面這個(gè)式子就可以更新隱藏層的全部權(quán)重和偏置了。

    在推導(dǎo)之前請(qǐng)先觀察下面這張圖:

    一文詳解神經(jīng)網(wǎng)絡(luò) BP 算法原理及 Python 實(shí)現(xiàn)

    l 和 l+1 層的神經(jīng)元

    首先我們看到 l 層的第 i 個(gè)神經(jīng)元與 l+1 層的所有神經(jīng)元都有連接,那么我們可以將 δ 展開(kāi)成如下的式子:

    一文詳解神經(jīng)網(wǎng)絡(luò) BP 算法原理及 Python 實(shí)現(xiàn)

    也即是說(shuō)我們可以將 E 看做是 l+1 層所有神經(jīng)元輸入值的 z 函數(shù),而上面式子的 n 表示的是 l+1 層神經(jīng)元的數(shù)量,再進(jìn)行化簡(jiǎn)后就可以得到上面所說(shuō)的式子。

    在這里的推導(dǎo)過(guò)程只解釋了關(guān)鍵的部分,如果要查看更加詳細(xì)的推導(dǎo)內(nèi)容,可以點(diǎn)擊此處下載我在學(xué)習(xí)過(guò)程中參考的一篇 pdf 文檔,里面的推導(dǎo)過(guò)程非常詳細(xì)。另外也參考了周志華所寫(xiě)的機(jī)器學(xué)習(xí)中的神經(jīng)網(wǎng)絡(luò)部分的內(nèi)容和 neural networks and deep learning 的內(nèi)容。

      Python 源碼解析

    源碼來(lái)自于 Michael Nielsen 大神的深度學(xué)習(xí)在線教程,但他的內(nèi)容都是英文的,我結(jié)合了自己的理解和上面的理論知識(shí)對(duì)源碼進(jìn)行了注釋。>>點(diǎn)擊此處查看整理的代碼和數(shù)字識(shí)別實(shí)例<<

    使用 Python 實(shí)現(xiàn)的神經(jīng)網(wǎng)絡(luò)的代碼行數(shù)并不多,僅包含一個(gè) Network 類(lèi),首先來(lái)看看該類(lèi)的構(gòu)造方法。

    def __init__(self, sizes):

            """

            :param sizes: list類(lèi)型,儲(chǔ)存每層神經(jīng)網(wǎng)絡(luò)的神經(jīng)元數(shù)目

                          譬如說(shuō):sizes = [2, 3, 2] 表示輸入層有兩個(gè)神經(jīng)元、

                          隱藏層有3個(gè)神經(jīng)元以及輸出層有2個(gè)神經(jīng)元

            """

            # 有幾層神經(jīng)網(wǎng)絡(luò) 

            self.num_layers = len(sizes)

            self.sizes = sizes

            # 除去輸入層,隨機(jī)產(chǎn)生每層中 y 個(gè)神經(jīng)元的 biase 值(0 - 1)

            self.biases = [np.random.randn(y, 1) for y in sizes[1:]]

            # 隨機(jī)產(chǎn)生每條連接線的 weight 值(0 - 1)

            self.weights = [np.random.randn(y, x)

                            for x, y in zip(sizes[:-1], sizes[1:])]

    向前傳輸(FreedForward)的代碼。

        def feedforward(self, a):

            """

            前向傳輸計(jì)算每個(gè)神經(jīng)元的值

            :param a: 輸入值

            :return: 計(jì)算后每個(gè)神經(jīng)元的值

            """

            for b, w in zip(self.biases, self.weights):

                # 加權(quán)求和以及加上 biase

                a = sigmoid(np.dot(w, a)+b)

            return a

    源碼里使用的是隨機(jī)梯度下降(Stochastic Gradient Descent,簡(jiǎn)稱(chēng) SGD),原理與梯度下降相似,不同的是隨機(jī)梯度下降算法每次迭代只取數(shù)據(jù)集中一部分的樣本來(lái)更新 w 和 b 的值,速度比梯度下降快,但是,它不一定會(huì)收斂到局部極小值,可能會(huì)在局部極小值附近徘徊。

        def SGD(self, training_data, epochs, mini_batch_size, eta,

                test_data=None):

            """

            隨機(jī)梯度下降

            :param training_data: 輸入的訓(xùn)練集

            :param epochs: 迭代次數(shù)

            :param mini_batch_size: 小樣本數(shù)量

            :param eta: 學(xué)習(xí)率 

            :param test_data: 測(cè)試數(shù)據(jù)集

            """

            if test_data: n_test = len(test_data)

            n = len(training_data)

            for j in xrange(epochs):

                # 攪亂訓(xùn)練集,讓其排序順序發(fā)生變化

                random.shuffle(training_data)

                # 按照小樣本數(shù)量劃分訓(xùn)練集

                mini_batches = [

                    training_data[k:k+mini_batch_size]

                    for k in xrange(0, n, mini_batch_size)]

                for mini_batch in mini_batches:

                    # 根據(jù)每個(gè)小樣本來(lái)更新 w 和 b,代碼在下一段

                    self.update_mini_batch(mini_batch, eta)

                # 輸出測(cè)試每輪結(jié)束后,神經(jīng)網(wǎng)絡(luò)的準(zhǔn)確度

                if test_data:

                    print "Epoch {0}: {1} / {2}".format(

                        j, self.evaluate(test_data), n_test)

                else:

                    print "Epoch {0} complete".format(j)

    根據(jù) backprop 方法得到的偏導(dǎo)數(shù)更新 w 和 b 的值。

        def update_mini_batch(self, mini_batch, eta):

            """

            更新 w 和 b 的值

            :param mini_batch: 一部分的樣本

            :param eta: 學(xué)習(xí)率

            """

            # 根據(jù) biases 和 weights 的行列數(shù)創(chuàng)建對(duì)應(yīng)的全部元素值為 0 的空矩陣

            nabla_b = [np.zeros(b.shape) for b in self.biases]

            nabla_w = [np.zeros(w.shape) for w in self.weights]

            for x, y in mini_batch:

                # 根據(jù)樣本中的每一個(gè)輸入 x 的其輸出 y,計(jì)算 w 和 b 的偏導(dǎo)數(shù)

                delta_nabla_b, delta_nabla_w = self.backprop(x, y)

                # 累加儲(chǔ)存偏導(dǎo)值 delta_nabla_b 和 delta_nabla_w 

                nabla_b = [nb+dnb for nb, dnb in zip(nabla_b, delta_nabla_b)]

                nabla_w = [nw+dnw for nw, dnw in zip(nabla_w, delta_nabla_w)]

            # 更新根據(jù)累加的偏導(dǎo)值更新 w 和 b,這里因?yàn)橛昧诵颖荆?/p>

            # 所以 eta 要除于小樣本的長(zhǎng)度

            self.weights = [w-(eta/len(mini_batch))*nw

                            for w, nw in zip(self.weights, nabla_w)]

            self.biases = [b-(eta/len(mini_batch))*nb

                           for b, nb in zip(self.biases, nabla_b)]

    下面這塊代碼是源碼最核心的部分,也即 BP 算法的實(shí)現(xiàn),包含了前向傳輸和逆向反饋,前向傳輸在 Network 里有單獨(dú)一個(gè)方法(上面提到的 feedforward 方法),那個(gè)方法是用于驗(yàn)證訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)的精確度的,在下面有提到該方法。

        def backprop(self, x, y):

            """

            :param x:

            :param y:

            :return:

            """

            nabla_b = [np.zeros(b.shape) for b in self.biases]

            nabla_w = [np.zeros(w.shape) for w in self.weights]

            # 前向傳輸

            activation = x

            # 儲(chǔ)存每層的神經(jīng)元的值的矩陣,下面循環(huán)會(huì) append 每層的神經(jīng)元的值

            activations = [x] 

            # 儲(chǔ)存每個(gè)未經(jīng)過(guò) sigmoid 計(jì)算的神經(jīng)元的值

            zs = [] 

            for b, w in zip(self.biases, self.weights):

                z = np.dot(w, activation)+b

                zs.append(z)

                activation = sigmoid(z)

                activations.append(activation)

            # 求 δ 的值

            delta = self.cost_derivative(activations[-1], y) * \

                sigmoid_prime(zs[-1])

            nabla_b[-1] = delta

            # 乘于前一層的輸出值

            nabla_w[-1] = np.dot(delta, activations[-2].transpose())

            for l in xrange(2, self.num_layers):

                # 從倒數(shù)第 **l** 層開(kāi)始更新,**-l** 是 python 中特有的語(yǔ)法表示從倒數(shù)第 l 層開(kāi)始計(jì)算

                # 下面這里利用 **l+1** 層的 δ 值來(lái)計(jì)算 **l** 的 δ 值

                z = zs[-l]

                sp = sigmoid_prime(z)

                delta = np.dot(self.weights[-l+1].transpose(), delta) * sp

                nabla_b[-l] = delta

                nabla_w[-l] = np.dot(delta, activations[-l-1].transpose())

            return (nabla_b, nabla_w)

    接下來(lái)則是 evaluate 的實(shí)現(xiàn),調(diào)用 feedforward 方法計(jì)算訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)的輸出層神經(jīng)元值(也即預(yù)測(cè)值),然后比對(duì)正確值和預(yù)測(cè)值得到精確率。

        def evaluate(self, test_data):

            # 獲得預(yù)測(cè)結(jié)果

            test_results = [(np.argmax(self.feedforward(x)), y)

                            for (x, y) in test_data]

            # 返回正確識(shí)別的個(gè)數(shù)

            return sum(int(x == y) for (x, y) in test_results)

    最后,我們可以利用這個(gè)源碼來(lái)訓(xùn)練一個(gè)手寫(xiě)數(shù)字識(shí)別的神經(jīng)網(wǎng)絡(luò),并輸出評(píng)估的結(jié)果,代碼如下:

    import mnist_loader

    import network


    training_data, validation_data, test_data = mnist_loader.load_data_wrapper()

    net = network.Network([784, 30, 10])

    net.SGD(training_data, 30, 10, 3.0, test_data = test_data)

    # 輸出結(jié)果

    # Epoch 0: 9038 / 10000

    # Epoch 1: 9178 / 10000

    # Epoch 2: 9231 / 10000

    # ...

    # Epoch 27: 9483 / 10000

    # Epoch 28: 9485 / 10000

    # Epoch 29: 9477 / 10000

    可以看到,在經(jīng)過(guò) 30 輪的迭代后,識(shí)別手寫(xiě)神經(jīng)網(wǎng)絡(luò)的精確度在 95% 左右,當(dāng)然,設(shè)置不同的迭代次數(shù),學(xué)習(xí)率以取樣數(shù)對(duì)精度都會(huì)有影響,如何調(diào)參也是一門(mén)技術(shù)活,這個(gè)坑就后期再填吧。

      總結(jié)

    神經(jīng)網(wǎng)絡(luò)的優(yōu)點(diǎn):

    網(wǎng)絡(luò)實(shí)質(zhì)上實(shí)現(xiàn)了一個(gè)從輸入到輸出的映射功能,而數(shù)學(xué)理論已證明它具有實(shí)現(xiàn)任何復(fù)雜非線性映射的功能。這使得它特別適合于求解內(nèi)部機(jī)制復(fù)雜的問(wèn)題。

    網(wǎng)絡(luò)能通過(guò)學(xué)習(xí)帶正確答案的實(shí)例集自動(dòng)提取“合理的”求解規(guī)則,即具有自學(xué)習(xí)能力。

    網(wǎng)絡(luò)具有一定的推廣、概括能力。

    神經(jīng)網(wǎng)絡(luò)的缺點(diǎn):

    對(duì)初始權(quán)重非常敏感,極易收斂于局部極小。

    容易 Over Fitting 和 Over Training。

    如何選擇隱藏層數(shù)和神經(jīng)元個(gè)數(shù)沒(méi)有一個(gè)科學(xué)的指導(dǎo)流程,有時(shí)候感覺(jué)就是靠猜。

    應(yīng)用領(lǐng)域:

    常見(jiàn)的有圖像分類(lèi),自動(dòng)駕駛,自然語(yǔ)言處理等。

      TODO

    但其實(shí)想要訓(xùn)練好一個(gè)神經(jīng)網(wǎng)絡(luò)還面臨著很多的坑(譬如下面四條):

    1. 如何選擇超參數(shù)的值,譬如說(shuō)神經(jīng)網(wǎng)絡(luò)的層數(shù)和每層的神經(jīng)元數(shù)量以及學(xué)習(xí)率;

    2. 既然對(duì)初始化權(quán)重敏感,那該如何避免和修正;

    3. Sigmoid 激活函數(shù)在深度神經(jīng)網(wǎng)絡(luò)中會(huì)面臨梯度消失問(wèn)題該如何解決;

    4. 避免 Overfitting 的 L1 和 L2正則化是什么。

      參考

    [1] 周志華 機(jī)器學(xué)習(xí)

    [2] 斯坦福大學(xué)機(jī)器學(xué)習(xí)在線課程

    [3] Parallel Distributed Processing (1986, by David E. Rumelhart, James L. McClelland), Chapter 8 Learning Internal Representations by Error Propagation

    [4] How the backpropagation algorithm works

    [5] Backpropagation Algorithm

    [6] 鏈?zhǔn)角髮?dǎo)法則,臺(tái)灣中華科技大學(xué)數(shù)位課程,Youtube 視頻,需要翻墻,順便安利一下他們的數(shù)學(xué)相關(guān)的視頻,因?yàn)樽龅亩挤浅\顯易懂

    雷鋒網(wǎng)(公眾號(hào):雷鋒網(wǎng))相關(guān)閱讀:

    反向傳播算法最全解讀,機(jī)器學(xué)習(xí)進(jìn)階必看!

    淺談神經(jīng)網(wǎng)絡(luò)訓(xùn)練方法,Deepmind更青睞正向傳播


    深度學(xué)習(xí)之神經(jīng)網(wǎng)絡(luò)特訓(xùn)班

    20年清華大學(xué)神經(jīng)網(wǎng)絡(luò)授課導(dǎo)師鄧志東教授,帶你系統(tǒng)學(xué)習(xí)人工智能之神經(jīng)網(wǎng)絡(luò)理論及應(yīng)用!

    課程鏈接:http://www.mooc.ai/course/65

    加入AI慕課學(xué)院人工智能學(xué)習(xí)交流QQ群:624413030,與AI同行一起交流成長(zhǎng)


    一文詳解神經(jīng)網(wǎng)絡(luò) BP 算法原理及 Python 實(shí)現(xiàn)

    分享:
    相關(guān)文章

    編輯

    聚焦數(shù)據(jù)科學(xué),連接 AI 開(kāi)發(fā)者。更多精彩內(nèi)容,請(qǐng)?jiān)L問(wèn):yanxishe.com
    當(dāng)月熱門(mén)文章
    最新文章
    請(qǐng)?zhí)顚?xiě)申請(qǐng)人資料
    姓名
    電話
    郵箱
    微信號(hào)
    作品鏈接
    個(gè)人簡(jiǎn)介
    為了您的賬戶(hù)安全,請(qǐng)驗(yàn)證郵箱
    您的郵箱還未驗(yàn)證,完成可獲20積分喲!
    請(qǐng)驗(yàn)證您的郵箱
    立即驗(yàn)證
    完善賬號(hào)信息
    您的賬號(hào)已經(jīng)綁定,現(xiàn)在您可以設(shè)置密碼以方便用郵箱登錄
    立即設(shè)置 以后再說(shuō)
    主站蜘蛛池模板: 1024国产基地永久免费| 欧美中文字幕精品人妻| 国产乱妇无乱码大黄aa片| 国产成人午夜福利在线观看蜜芽| 92自拍偷拍精品视频| 国产乱子伦精品免费无码专区| 激情综合色综合久久综合| 亚洲成人一区| 亚洲国产精品久久久久秋霞影院| 日韩视频在线一区二区播放| 日本伦理在线一区二区| 最近中文字幕日韩有码| 精品无码久久久久成人漫画| 国产精品亚洲综合久久小说 | 三上悠亚日韩精品二区| 国产成人无码A区在线观| 中文字幕av久久爽一区| 少妇人妻一区二区三区| 国产高清不卡免费视频| 欧美在线精品怡红院| 手机在线看片不卡中文字幕| 欧美 亚洲 国产 制服 中文| 成人九九| 最新国产在线拍揄自揄视频| 日韩有码在线观看| 亚洲精品国产中文字幕| 亚洲乳大丰满中文字幕| 亚洲色无码播放亚洲成av| 国产一区二区三区精品综合| 另类一区| 精品99在线| 国精品日韩欧美一区二区三区| 欧美人伦禁忌dvd放荡欲情| 亚洲国产色婷婷久久99精品91| 国产丝袜打飞机免费在线| 日本激情网址| 久久久2019精品| 国产一区精品综亚洲av| 国产欧美亚洲精品第一页在线| 夜夜躁爽| 国产精品综合一区二区三区|