當前位置:首頁 » 操作系統 » 演算法反向圖

演算法反向圖

發布時間: 2023-01-30 05:23:05

1. 一文搞懂反向傳播演算法

這是一場以誤差(Error)為主導的反向傳播(Back Propagation)運動,旨在得到最優的全局參數矩陣,進而將多層神經網路應用到分類或者回歸任務中去。

前向傳遞輸入信號直至輸出產生誤差,反向傳播誤差信息更新權重矩陣。這兩句話很好的形容了信息的流動方向,權重得以在信息雙向流動中得到優化,這讓我想到了北京城的夜景,車輛川流不息,車水馬龍,你來我往(* ॑꒳ ॑* )⋆*。

至於為什麼會提出反向傳播演算法,我直接應用梯度下降(Gradient Descent)不行嗎?想必大家肯定有過這樣的疑問。答案肯定是不行的,縱然梯度下降神通廣大,但卻不是萬能的。梯度下降可以應對帶有明確求導函數的情況,或者說可以應對那些可以求出誤差的情況,比如邏輯回歸(Logistic Regression),我們可以把它看做沒有隱層的網路;但對於多隱層的神經網路,輸出層可以直接求出誤差來更新參數,但其中隱層的誤差是不存在的,因此不能對它直接應用梯度下降,而是先將誤差反向傳播至隱層,然後再應用梯度下降,其中將誤差從末層往前傳遞的過程需要鏈式法則(Chain Rule)的幫助,因此反向傳播演算法可以說是梯度下降在鏈式法則中的應用。

為了幫助較好的理解反向傳播概念,對它有一個直觀的理解,接下來就拿猜數字游戲舉個栗子。

這一過程類比沒有隱層的神經網路,比如邏輯回歸,其中小黃帽代表輸出層節點,左側接受輸入信號,右側產生輸出結果,小藍貓則代表了誤差,指導參數往更優的方向調整。由於小藍貓可以直接將誤差反饋給小黃帽,同時只有一個參數矩陣和小黃帽直接相連,所以可以直接通過誤差進行參數優化(實縱線),迭代幾輪,誤差會降低到最小。

這一過程類比帶有一個隱層的三層神經網路,其中小女孩代表隱藏層節點,小黃帽依然代表輸出層節點,小女孩左側接受輸入信號,經過隱層節點產生輸出結果,小藍貓代表了誤差,指導參數往更優的方向調整。由於小藍貓可以直接將誤差反饋給小黃帽,所以與小黃帽直接相連的左側參數矩陣可以直接通過誤差進行參數優化(實縱線);而與小女孩直接相連的左側參數矩陣由於不能得到小藍貓的直接反饋而不能直接被優化(虛棕線)。但由於反向傳播演算法使得小藍貓的反饋可以被傳遞到小女孩那進而產生間接誤差,所以與小女孩直接相連的左側權重矩陣可以通過間接誤差得到權重更新,迭代幾輪,誤差會降低到最小。

上邊的栗子從直觀角度了解了反向傳播,接下來就詳細的介紹其中兩個流程前向傳播與反向傳播,在介紹之前先統一一下標記。

如何將輸入層的信號傳輸至隱藏層呢,以隱藏層節點c為例,站在節點c上往後看(輸入層的方向),可以看到有兩個箭頭指向節點c,因此a,b節點的信息將傳遞給c,同時每個箭頭有一定的權重,因此對於c節點來說,輸入信號為:

同理,節點d的輸入信號為:

由於計算機善於做帶有循環的任務,因此我們可以用矩陣相乘來表示:

所以,隱藏層節點經過非線性變換後的輸出表示如下:

同理,輸出層的輸入信號表示為權重矩陣乘以上一層的輸出:

同樣,輸出層節點經過非線性映射後的最終輸出表示為:

輸入信號在權重矩陣們的幫助下,得到每一層的輸出,最終到達輸出層。可見,權重矩陣在前向傳播信號的過程中扮演著運輸兵的作用,起到承上啟下的功能。

既然梯度下降需要每一層都有明確的誤差才能更新參數,所以接下來的重點是如何將輸出層的誤差反向傳播給隱藏層。

其中輸出層、隱藏層節點的誤差如圖所示,輸出層誤差已知,接下來對隱藏層第一個節點c作誤差分析。還是站在節點c上,不同的是這次是往前看(輸出層的方向),可以看到指向c節點的兩個藍色粗箭頭是從節點e和節點f開始的,因此對於節點c的誤差肯定是和輸出層的節點e和f有關。

不難發現,輸出層的節點e有箭頭分別指向了隱藏層的節點c和d,因此對於隱藏節點e的誤差不能被隱藏節點c霸為己有,而是要服從按勞分配的原則(按權重分配),同理節點f的誤差也需服從這樣的原則,因此對於隱藏層節點c的誤差為:

同理,對於隱藏層節點d的誤差為:

為了減少工作量,我們還是樂意寫成矩陣相乘的形式:

你會發現這個矩陣比較繁瑣,如果能夠簡化到前向傳播那樣的形式就更好了。實際上我們可以這么來做,只要不破壞它們的比例就好,因此我們可以忽略掉分母部分,所以重新成矩陣形式為:

仔細觀察,你會發現這個權重矩陣,其實是前向傳播時權重矩陣w的轉置,因此簡寫形式如下:

不難發現,輸出層誤差在轉置權重矩陣的幫助下,傳遞到了隱藏層,這樣我們就可以利用間接誤差來更新與隱藏層相連的權重矩陣。可見,權重矩陣在反向傳播的過程中同樣扮演著運輸兵的作用,只不過這次是搬運的輸出誤差,而不是輸入信號(我們不生產誤差,只是誤差的搬運工(っ̯ -。))。

第三部分大致介紹了輸入信息的前向傳播與輸出誤差的後向傳播,接下來就根據求得的誤差來更新參數。

首先對隱藏層的w11進行參數更新,更新之前讓我們從後往前推導,直到預見w11為止:

因此誤差對w11求偏導如下:

求導得如下公式(所有值已知):

同理,誤差對於w12的偏導如下:

同樣,求導得w12的求值公式:

同理,誤差對於偏置求偏導如下:

帶入上述公式為:

接著對輸入層的w11進行參數更新,更新之前我們依然從後往前推導,直到預見第一層的w11為止(只不過這次需要往前推的更久一些):

因此誤差對輸入層的w11求偏導如下:

同理,輸入層的其他三個參數按照同樣的方法即可求出各自的偏導,在這不再贅述。

在每個參數偏導數明確的情況下,帶入梯度下降公式即可(不在重點介紹):

至此,利用鏈式法則來對每層參數進行更新的任務已經完成。

利用鏈式法則來更新權重你會發現其實這個方法簡單,但過於冗長。由於更新的過程可以看做是從網路的輸入層到輸出層從前往後更新,每次更新的時候都需要重新計算節點的誤差,因此會存在一些不必要的重復計算。其實對於已經計算完畢的節點我們完全可以直接拿來用,因此我們可以重新看待這個問題,從後往前更新。先更新後邊的權重,之後再在此基礎上利用更新後邊的權重產生的中間值來更新較靠前的參數。這個中間變數就是下文要介紹的delta變數,一來簡化公式,二來減少計算量,有點動態規劃的趕腳。

接下來用事實說話,大家仔細觀察一下在第四部分鏈式求導部分誤差對於輸出層的w11以及隱藏層的w11求偏導以及偏置的求偏導的過程,你會發現,三個公式存在相同的部分,同時隱藏層參數求偏導的過程會用到輸出層參數求偏導的部分公式,這正是引入了中間變數delta的原因(其實紅框的公式就是delta的定義)。

大家看一下經典書籍《神經網路與深度學習》中對於delta的描述為在第l層第j個神經元上的誤差,定義為誤差對於當前帶權輸入求偏導,數學公式如下:

因此輸出層的誤差可以表示為(上圖紅色框公式):

隱藏層的誤差可以表示為(上圖藍色框公式):

同時對於權重更新的表示為(上圖綠色框公式):

其實對於偏置的更新表示為(上圖紅色框):

上述4個公式其實就是《神經網路與深度學習》書中傳說的反向傳播4大公式(詳細推導證明可移步此書):

仔細觀察,你會發現BP1與BP2相結合就能發揮出最大功效,可以計算出任意層的誤差,只要首先利用BP1公式計算出輸出層誤差,然後利用BP2層層傳遞,就無敵了,這也正是誤差反向傳播演算法的緣由吧。同時對於權重w以及偏置b我們就可以通過BP3和BP4公式來計算了。

至此,我們介紹了反向傳播的相關知識,一開始看反向傳播資料的時候總覺得相對獨立,這個教材這么講,另一篇博客又換一個講法,始終不能很好的理解其中的含義,到目前為止,思路相對清晰。我們先從大致流程上介紹了反向傳播的來龍去脈,接著用鏈式求導法則來計算權重以及偏置的偏導,進而我們推出了跟經典著作一樣樣兒的結論,因此本人覺得較為詳細,應該對初學者有一定的借鑒意義,希望對大家有所幫助。

Nielsen M A. Neural networks and deep learning[M]. 2015.
Rashid T. Make your own neural network[M]. CreateSpace IndependentPublishing Platform, 2016.

2. 反向傳播演算法之要點(Backpropagation)

反向傳播是一個很簡單的演算法,一個學習過微積分的人就能夠輕松的理解。本文希望避免讓人打不起精神來看的冗餘繁雜,簡潔地把反向傳播的演算法的推導過程和求解過程進行簡潔、清晰的表述。

反向傳播的要點只有3個公式,首先在此做總結如下:

已知:

推導:

全微分Review:

推導:

反向傳播的本質是鏈式法則+動態規劃。

整個計算圖中,假設每個連邊代表上層對下層進行求導,那麼傳統方法求解cost function關於某個參數的導數,根據鏈式法則,就需要計算從最後一層到這一個參數路徑上的所有導數,然後再把他們乘起來。可想而知,計算復雜度隨著網路的深度增加將會變得非常大。

在反向傳播演算法中,首先通過一個前向傳播的過程計算並保存了每一層的輸出,然後利用鏈式法則推導出了從後往前的遞推公式,使得計算圖上的每一條邊只用計算一次,就能求出關於任何參數的導數。

3. 一文徹底搞懂BP演算法:原理推導+數據演示+項目實戰(上篇)

反向傳播演算法(Backpropagation Algorithm,簡稱BP演算法)是深度學習的重要思想基礎,對於初學者來說也是必須要掌握的基礎知識!本文希望以一個清晰的脈絡和詳細的說明,來讓讀者徹底明白BP演算法的原理和計算過程。

全文分為上下兩篇,上篇主要介紹BP演算法的原理(即公式的推導),介紹完原理之後,我們會將一些具體的數據帶入一個簡單的三層神經網路中,去完整的體驗一遍BP演算法的計算過程;下篇是一個項目實戰,我們將帶著讀者一起親手實現一個BP神經網路(不使用任何第三方的深度學習框架)來解決一個具體的問題。

圖 1 所示是一個簡單的三層(兩個隱藏層,一個輸出層)神經網路結構,假設我們使用這個神經網路來解決二分類問題,我們給這個網路一個輸入樣本 ,通過前向運算得到輸出 。輸出值 的值域為 ,例如 的值越接近0,代表該樣本是"0"類的可能性越大,反之是"1"類的可能性大。

為了便於理解後續的內容,我們需要先搞清楚前向傳播的計算過程,以圖1所示的內容為例:

輸入的樣本為:

第一層網路的參數為:

第二層網路的參數為:

第三層網路的參數為:

第一層隱藏層有三個神經元: 、 和 。該層的輸入為:

以 神經元為例,則其輸入為:

同理有:

假設我們選擇函數 作為該層的激活函數(圖1中的激活函數都標了一個下標,一般情況下,同一層的激活函數都是一樣的,不同層可以選擇不同的激活函數),那麼該層的輸出為: 、 和 。

第二層隱藏層有兩個神經元: 和 。該層的輸入為:

即第二層的輸入是第一層的輸出乘以第二層的權重,再加上第二層的偏置。因此得到和的輸入分別為:

該層的輸出分別為: 和 。

輸出層只有一個神經元 :。該層的輸入為:

即:

因為該網路要解決的是一個二分類問題,所以輸出層的激活函數也可以使用一個Sigmoid型函數,神經網路最後的輸出為: 。

在1.1節里,我們已經了解了數據沿著神經網路前向傳播的過程,這一節我們來介紹更重要的反向傳播的計算過程。假設我們使用隨機梯度下降的方式來學習神經網路的參數,損失函數定義為 ,其中 是該樣本的真實類標。使用梯度下降進行參數的學習,我們必須計算出損失函數關於神經網路中各層參數(權重 和偏置 )的偏導數。

假設我們要對第 層隱藏層的參數 和 求偏導數,即求 和 。假設 代表第 層神經元的輸入,即 ,其中 為前一層神經元的輸出,則根據鏈式法則有:

因此,我們只需要計算偏導數 、 和 。

前面說過,第k層神經元的輸入為: ,因此可以得到:

上式中, 代表第 層神經元的權重矩陣 的第 行, 代表第 層神經元的權重矩陣 的第 行中的第 列。

我們以1.1節中的簡單神經網路為例,假設我們要計算第一層隱藏層的神經元關於權重矩陣的導數,則有:

因為偏置b是一個常數項,因此偏導數的計算也很簡單:

依然以第一層隱藏層的神經元為例,則有:

偏導數 又稱為 誤差項(error term,也稱為「靈敏度」) ,一般用 表示,例如 是第一層神經元的誤差項,其值的大小代表了第一層神經元對於最終總誤差的影響大小。

根據第一節的前向計算,我們知道第 層的輸入與第 層的輸出之間的關系為:

又因為 ,根據鏈式法則,我們可以得到 為:

由上式我們可以看到,第 層神經元的誤差項 是由第 層的誤差項乘以第 層的權重,再乘以第 層激活函數的導數(梯度)得到的。這就是誤差的反向傳播。
現在我們已經計算出了偏導數 、 和 ,則 和 可分別表示為:

下面是基於隨機梯度下降更新參數的反向傳播演算法:

單純的公式推導看起來有些枯燥,下面我們將實際的數據帶入圖1所示的神經網路中,完整的計算一遍。

我們依然使用如圖5所示的簡單的神經網路,其中所有參數的初始值如下:

輸入的樣本為(假設其真實類標為"1"):

第一層網路的參數為:

第二層網路的參數為:

第三層網路的參數為:

假設所有的激活函數均為Logistic函數: 。使用均方誤差函數作為損失函數:

為了方便求導,我們將損失函數簡化為:

我們首先初始化神經網路的參數,計算第一層神經元:

上圖中我們計算出了第一層隱藏層的第一個神經元的輸入 和輸出 ,同理可以計算第二個和第三個神經元的輸入和輸出:

接下來是第二層隱藏層的計算,首先我們計算第二層的第一個神經元的輸入z₄和輸出f₄(z₄):

同樣方法可以計算該層的第二個神經元的輸入 和輸出 :

最後計算輸出層的輸入 和輸出 :

首先計算輸出層的誤差項 ,我們的誤差函數為 ,由於該樣本的類標為「1」,而預測值為 ,因此誤差為 ,輸出層的誤差項為:

接著計算第二層隱藏層的誤差項,根據誤差項的計算公式有:

最後是計算第一層隱藏層的誤差項:

4. 反向傳播演算法的演算法簡介

反向傳播演算法(backpropagation)是目前用來訓練人工神經網路(artificial
neural
network,ann)的最常用且最有效的演算法。其主要思想是:
(1)將訓練集數據輸入到ann的輸入層,經過隱藏層,最後達到輸出層並輸出結果,這是ann的前向傳播過程;
(2)由於ann的輸出結果與實際結果有誤差,則計算估計值與實際值之間的誤差,並將該誤差從輸出層向隱藏層反向傳播,直至傳播到輸入層;
(3)在反向傳播的過程中,根據誤差調整各種參數的值;不斷迭代上述過程,直至收斂。
反向傳播演算法的思想比較容易理解,但具體的公式則要一步步推導,因此本文著重介紹公式的推導過程。
1.
變數定義
上圖是一個三層人工神經網路,layer1至layer3分別是輸入層、隱藏層和輸出層。如圖,先定義一些變數:
表示第層的第個神經元連接到第層的第個神經元的權重;
表示第層的第個神經元的偏置;
表示第層的第個神經元的輸入,即:
表示第層的第個神經元的輸出,即:
其中表示激活函數。
2.
代價函數
代價函數被用來計算ann輸出值與實際值之間的誤差。常用的代價函數是二次代價函數(quadratic
cost
function):
其中,表示輸入的樣本,表示實際的分類,表示預測的輸出,表示神經網路的最大層數。
3.
公式及其推導
本節將介紹反向傳播演算法用到的4個公式,並進行推導。如果不想了解公式推導過程,請直接看第4節的演算法步驟。
首先,將第層第個神經元中產生的錯誤(即實際值與預測值之間的誤差)定義為:
本文將以一個輸入樣本為例進行說明,此時代價函數表示為:
公式1(計算最後一層神經網路產生的錯誤):
其中,表示hadamard乘積,用於矩陣或向量之間點對點的乘法運算。公式1的推導過程如下:
公式2(由後往前,計算每一層神經網路產生的錯誤):
推導過程:
公式3(計算權重的梯度):
推導過程:
公式4(計算偏置的梯度):
推導過程:
4.
反向傳播演算法偽代碼
輸入訓練集
對於訓練集中的每個樣本x,設置輸入層(input
layer)對應的激活值:
前向傳播:

計算輸出層產生的錯誤:

5. 如何理解神經網路裡面的反向傳播演算法

反向傳播演算法(BP演算法)主要是用於最常見的一類神經網路,叫多層前向神經網路,本質可以看作是一個general nonlinear estimator,即輸入x_1 ... x_n 輸出y,視圖找到一個關系 y=f(x_1 ... x_n) (在這里f的實現方式就是神經網路)來近似已知數據。為了得到f中的未知參數的最優估計值,一般會採用最小化誤差的准則,而最通常的做法就是梯度下降,到此為止都沒問題,把大家困住了很多年的就是多層神經網路無法得到顯式表達的梯度下降演算法!

BP演算法實際上是一種近似的最優解決方案,背後的原理仍然是梯度下降,但為了解決上述困難,其方案是將多層轉變為一層接一層的優化:只優化一層的參數是可以得到顯式梯度下降表達式的;而順序呢必須反過來才能保證可工作——由輸出層開始優化前一層的參數,然後優化再前一層……跑一遍下來,那所有的參數都優化過一次了。但是為什麼說是近似最優呢,因為數學上除了很特殊的結構,step-by-step的優化結果並不等於整體優化的結果!不過,好歹現在能工作了,不是嗎?至於怎麼再改進(已經很多改進成果了),或者採用其他演算法(例如智能優化演算法等所謂的全局優化演算法,就算是沒有BP這個近似梯度下降也只是局部最優的優化演算法)那就是新的研究課題了。

6. 反向傳播演算法是什麼

反向傳播演算法,簡稱BP演算法,適合於多層神經元網路的一種學習演算法。

它建立在梯度下降法的基礎上。BP網路的輸入輸出關系實質上是一種映射關系:一個n輸入m輸出的BP神經網路所完成的功能是從n維歐氏空間向m維歐氏空間中一有限域的連續映射,這一映射具有高度非線性。它的信息處理能力來源於簡單非線性函數的多次復合,因此具有很強的函數復現能力。這是BP演算法得以應用的基礎。

反向傳播演算法動機簡介

反向傳播演算法被設計為減少公共子表達式的數量而不考慮存儲的開銷。反向傳播避免了重復子表達式的指數爆炸。然而,其他演算法可能通過對計算圖進行簡化來避免更多的子表達式,或者也可能通過重新計算而不是存儲這些子表達式來節省內存。

7. 解讀反向傳播演算法(BackPropagation)

冒泡~周末愉快鴨!

舉個例子:
如下圖所示,這是 帶有一個隱層的三層神經網路
-小女孩→隱藏層節點
-小黃帽→輸出層節點
-哆啦A夢→誤差
小女孩左側接受輸入信號,經過隱層節點產生輸出結果,哆啦A夢則指導參數往更優的方向調整。 由於哆啦A夢可以直接將誤差反饋給小黃帽,所以與小黃帽直接相連的左側參數矩陣可以直接通過誤差進行參數優化(實縱線);而與小女孩直接相連的左側參數矩陣由於不能得到哆啦A夢的直接反饋而不能直接被優化(虛棕線)。但由於反向傳播演算法使得哆啦A夢的反饋可以被傳遞到小女孩那進而產生間接誤差,所以與小女孩直接相連的左側權重矩陣可以通過間接誤差得到權重更新,迭代幾輪,誤差會降低到最小。( 也就是說小男孩得到的是直接誤差,小女孩是間接誤差

接下來將用例子演示整個過程
假設有下圖這樣一個帶權值的網路層,第一層是輸入層,包含兩個神經元i1,i2,和截距項b1;第二層是隱含層,包含兩個神經元h1,h2和截距項b2,第三層是輸出o1,o2,每條線上標的wi是層與層之間連接的權重,激活函數我們默認為sigmoid函數。

通過前向傳播我們得到輸出值為[0.75136079 , 0.772928465],與實際值[0.01 , 0.99]相差還很遠,接下來我們對誤差進行反向傳播,更新權值,重新計算輸出。

3.輸入層---->隱含層的權值更新:
在上文計算總誤差對w5的偏導時,是從out(o1)---->net(o1)---->w5,但是在隱含層之間的權值更新時,是out(h1)---->net(h1)---->w1,而out(h1)會接受E(o1)和E(o2)兩個地方傳來的誤差,所以這個地方兩個都要計算。

根據BP演算法的過程演示,可以得到BP演算法的一般過程:
1. 正向傳播FP(求損失)
此過程中,我們根據輸入的樣本、給定的初始化權重值W和偏置項的值b, 計算最終輸出值以及輸出值與實際值之間的損失值。( 注意:如果損失值不在給定的范圍內則進行接下來反向傳播的過程, 否則停止W,b的更新。
2.反向傳播BP(回傳誤差)
將輸出以某種形式通過隱層向輸入層逐層反傳,並將誤差分攤給各層的所有單元,從而獲得各層單元的誤差信號,此誤差信號即作為修正各單元權值的依據。( 主要為: ①隱層到輸出層的參數W的更新 ②從輸入層到隱層的參數W的更新。

Ending~理解計算和公式還是很重要的鴨!

8. 數據結構鏈表反轉演算法,求大神畫下這演算法的圖,很費解。

帶頭結點的鏈表的反轉。p指向已反轉部分的第一個結點,t指向待反轉部分的第一個結點,q指向待反轉部分的第二個結點。

9. 什麼是反向傳播演算法

反向傳播演算法適合於多層神經元網路的一種學習演算法,它建立在梯度下降法的基礎上。反向傳播演算法網路的輸入輸出關系實質上是一種映射關系:一個n輸入m輸出的BP神經網路所完成的功能是從n維歐氏空間向m維歐氏空間中一有限域的連續映射,這一映射具有高度非線性。

反向傳播演算法主要由兩個環節(激勵傳播、權重更新)反復循環迭代,直到網路的對輸入的響應達到預定的目標范圍為止。

反向傳播演算法的信息處理能力來源於簡單非線性函數的多次復合,因此具有很強的函數復現能力。這是BP演算法得以應用的基礎。反向傳播演算法被設計為減少公共子表達式的數量而不考慮存儲的開銷。反向傳播避免了重復子表達式的指數爆炸。

(9)演算法反向圖擴展閱讀:

BP演算法(即反向傳播演算法)適合於多層神經元網路的一種學習演算法,它建立在梯度下降法的基礎上。BP網路的輸入輸出關系實質上是一種映射關系:一個n輸入m輸出的BP神經網路所完成的功能是從n維歐氏空間向m維歐氏空間中一有限域的連續映射,這一映射具有高度非線性。它的信息處理能力來源於簡單非線性函數的多次復合,因此具有很強的函數復現能力。這是BP演算法得以應用的基礎。

熱點內容
thinkphp關掉緩存 發布:2025-07-12 23:44:01 瀏覽:86
互動平台源碼 發布:2025-07-12 23:42:15 瀏覽:9
矩形密碼是什麼 發布:2025-07-12 23:41:15 瀏覽:407
kvm存儲技術包括 發布:2025-07-12 23:41:15 瀏覽:950
安卓手機網路怎麼設置才好 發布:2025-07-12 23:33:01 瀏覽:272
怎麼修改手機號服務密碼 發布:2025-07-12 23:29:37 瀏覽:158
myeclipsejsp資料庫連接 發布:2025-07-12 23:26:25 瀏覽:553
凱迪拉克ct6電磁懸掛是哪個配置 發布:2025-07-12 23:24:38 瀏覽:597
linuxnginx重啟 發布:2025-07-12 23:11:00 瀏覽:803
電腦檢查伺服器 發布:2025-07-12 23:10:59 瀏覽:606