摘要:深度學習通過組合低層特征形成更加抽象的高層表示屬性類別或特征,以發現數據的分布式特征表示。深度學習的概念由等人于年提出。但是自年以來,機器學習領域,取得了突破性的進展。
深度學習是機器學習研究中的一個新的領域,其動機在于建立、模擬人腦進行分析學習的神經網絡,它模仿人腦的機制來解釋數據,例如圖像,聲音和文本。深度學習是無監督學習的一種。
深度學習的概念源于人工神經網絡的研究。含多隱層的多層感知器就是一種深度學習結構。深度學習通過組合低層特征形成更加抽象的高層表示屬性類別或特征,以發現數據的分布式特征表示。
深度學習的概念由Hinton等人于2006年提出。基于深信度網(DBN)提出非監督貪心逐層訓練算法,為解決深層結構相關的優化難題帶來希望, 隨后提出多層自動編碼器深層結構。此外Lecun等人提出的卷積神經網絡是第一個真正多層結構學習算法,它利用空間相對關系減少參數數目以提高訓練性能。
一、Deep Learning的前世今生【1】
圖靈在 1950 年的論文里,提出圖靈試驗的設想,即,隔墻對話,你將不知道與你談話的,是人還是電腦 [1]。
這無疑給計算機,尤其是人工智能,預設了一個很高的期望值。但是半個世紀過去了,人工智能的進展,遠遠沒有達到圖靈試驗的標準。這不僅讓多年翹首以待的人們,心灰意冷,認為人工智能是忽悠,相關領域是“偽科學”。
2008 年 6 月,“連線”雜志主編,Chris Anderson 發表文章,題目是 “理論的終極,數據的泛濫將讓科學方法過時”。并且文中還引述經典著作 “人工智能的現代方法”的合著者,時任 Google 研究總監的 Peter Norvig 的言論,說 “一切模型都是錯的。進而言之,拋棄它們,你就會成功”[2]。
言下之意,精巧的算法是無意義的。面對海量數據,即便只用簡單的算法,也能得到出色的結果。與其鉆研算法,不如研究云計算,處理大數據。
如果這番言論,發生在 2006 年以前,可能我不會強力反駁。但是自 2006 年以來,機器學習領域,取得了突破性的進展。
圖靈試驗,至少不是那么可望而不可即了。至于技術手段,不僅僅依賴于云計算對大數據的并行處理能力,而且依賴于算法。這個算法就是,Deep Learning。
借助于 Deep Learning 算法,人類終于找到了如何處理 “抽象概念”這個亙古難題的方法。
于是學界忙著延攬相關領域的大師。Alex Smola 加盟 CMU,就是這個背景下的插曲。懸念是 Geoffrey Hinton 和 Yoshua Bengio 這兩位牛人,最后會加盟哪所大學。
Geoffrey Hinton 曾經轉戰 Cambridge、CMU,目前任教University of Toronto。相信挖他的名校一定不少。
Yoshua Bengio 經歷比較簡單,McGill University 獲得博士后,去 MIT 追隨 Mike Jordan 做博士后。目前任教 University of Montreal。
Deep Learning 引爆的這場革命,不僅學術意義巨大,而且離錢很近,實在太近了。如果把相關技術難題比喻成一座山,那么翻過這座山,山后就是特大露天金礦。技術難題解決以后,剩下的事情,就是動用資本和商業的強力手段,跑馬圈地了。
于是各大公司重兵集結,虎視眈眈。Google 兵分兩路,左路以 Jeff Dean 和 Andrew Ng 為首,重點突破 Deep Learning 等等算法和應用 [3]。
Jeff Dean 在 Google 諸位 Fellows 中,名列榜首,GFS 就是他的杰作。Andrew Ng 本科時,就讀 CMU,后來去 MIT 追隨 Mike Jordan。Mike Jordan 在 MIT 人緣不好,后來憤然出走 UC Berkeley。Andrew Ng 毫不猶豫追隨導師,也去了 Berkeley。拿到博士后,任教 Stanford,是 Stanford 新生代教授中的佼佼者,同時兼職 Google。
Google 右路軍由 Amit Singhal 領軍,目標是構建 Knowledge Graph 基礎設施。
1996 年 Amit Singhal 從 Cornell University 拿到博士學位后,去 Bell Lab 工作,2000 年加盟 Google。據說他去 Google 面試時,對 Google 創始人 Sergey Brian 說,“Your engine is Excellent, but let me rewirte it!”[4]
換了別人,說不定一個大巴掌就扇過去了。但是 Sergey Brian 大人大量,不僅不怪罪小伙子的輕狂,反而真的讓他從事新一代排名系統的研發。Amit Singhal 目前任職 Google 高級副總裁,掌管 Google 最核心的業務,搜索引擎。
Google 把王牌中之王牌,押寶在 Deep Learning 和 Knowledge Graph 上,目的是更快更大地奪取大數據革命的勝利果實。
Reference
[1] Turing Test.
http://en.wikipedia.org/wiki/Turing_test
[2] The End of Theory: The Data Deluge Makes the Scientific Method Obsolete
http://www.wired.com/science/discoveries/magazine/16-07/pb_theory
[3] Introduction to Deep Learning.
http://en.wikipedia.org/wiki/Deep_learning
[4] Interview with Amit Singhal, Google Fellow.
http://searchengineland.com/interview-with-amit-singhal-google-fellow-121342
【2】
1981 年的諾貝爾醫學獎,頒發給了 David Hubel 和 Torsten Wiesel,以及 Roger Sperry。前兩位的主要貢獻,是 “發現了視覺系統的信息處理”[1]。
1958 年,David Hubel 和 Torsten Wiesel 在 John Hopkins University,研究瞳孔區域與大腦皮層神經元的對應關系。他們在貓的后腦頭骨上,開了一個 3 毫米的小洞,向洞里插入電極,測量神經元的活躍程度。
然后,他們在小貓的眼前,展現各種形狀、各種亮度的物體。并且,在展現每一件物體時,還改變物體放置的位置和角度。他們期望通過這個辦法,讓小貓瞳孔感受不同類型、不同強弱的刺激。
之所以做這個試驗,目的是去證明一個猜測。位于后腦皮層的不同視覺神經元,與瞳孔所受刺激之間,存在某種對應關系。一旦瞳孔受到某一種刺激,后腦皮層的某一部分神經元就會活躍。
經歷了很多天反復的枯燥的試驗,同時犧牲了若干只可憐的小貓,David Hubel 和 Torsten Wiesel 發現了一種被稱為 “方向選擇性細胞(Orientation Selective Cell)”的神經元細胞。當瞳孔發現了眼前的物體的邊緣,而且這個邊緣指向某個方向時,這種神經元細胞就會活躍。
這個發現激發了人們對于神經系統的進一步思考。神經-中樞-大腦的工作過程,或許是一個不斷迭代、不斷抽象的過程。
這里的關鍵詞有兩個,一個是抽象,一個是迭代。從原始信號,做低級抽象,逐漸向高級抽象迭代。人類的邏輯思維,經常使用高度抽象的概念。
例如,從原始信號攝入開始(瞳孔攝入像素 Pixels),接著做初步處理(大腦皮層某些細胞發現邊緣和方向),然后抽象(大腦判定,眼前的物體的形狀,是圓形的),然后進一步抽象(大腦進一步判定該物體是只氣球)。
這個生理學的發現,促成了計算機人工智能,在四十年后的突破性發展。
Reference,
[1] The Nobel Prize in Physiology or Medicine 1981.
http://www.nobelprize.org/nobel_prizes/medicine/laureates/1981/
【3】
1995 年前后,Bruno Olshausen 和 David Field 兩位學者任職 Cornell University,他們試圖同時用生理學和計算機的手段,雙管齊下,研究視覺問題。
他們收集了很多黑白風景照片,從這些照片中,提取出 400 個小碎片,每個照片碎片的尺寸均為 16x16 像素,不妨把這 400 個碎片標記為 S[i], i = 0,.. 399。
接下來,再從這些黑白風景照片中,隨機提取另一個碎片,尺寸也是 16x16 像素,不妨把這個碎片標記為 T。
他們提出的問題是,如何從這 400 個碎片中,選取一組碎片,S[k], 通過疊加的辦法,合成出一個新的碎片,而這個新的碎片,應當與隨機選擇的目標碎片 T,盡可能相似,同時,S[k] 的數量盡可能少。用數學的語言來描述,就是,
?Sum_k (a[k] * S[k]) --> T, ????其中 a[k] 是在疊加碎片 S[k] 時的權重系數。
為解決這個問題,Bruno Olshausen 和 David Field 發明了一個算法,稀疏編碼(Sparse Coding)。稀疏編碼是一個重復迭代的過程,每次迭代分兩步。
1. 選擇一組 S[k],然后調整 a[k],使得 Sum_k (a[k] * S[k]) 最接近 T。
2. 固定住 a[k],在 400 個碎片中,選擇其它更合適的碎片S’[k],替代原先的 S[k],使得 Sum_k (a[k] * S’[k]) 最接近 T。
經過幾次迭代后,較佳的 S[k] 組合,被遴選出來了。令人驚奇的是,被選中的 S[k],基本上都是照片上不同物體的邊緣線,這些線段形狀相似,區別在于方向。[1]
Bruno Olshausen 和 David Field 的算法結果,與 David Hubel 和 Torsten Wiesel 的生理發現,不謀而合!
人工智能更加逼近自然智能了!
圖一. Illustration of Sparse Coding。
Reference,
[1] Emergence of Simple-Cell Receptive Field Properties by Learning a Sparse Code for Natural Images.
http://redwood.berkeley.edu/bruno/papers/nature-paper.pdf
原文鏈接:http://blog.sina.com.cn/s/blog_46d0a3930101fswl.html
作者微博:http://weibo.com/kandeng#1360336038853
二、Deep Learning的基本思想和方法實際生活中,人們為了解決一個問題,如對象的分類(對象可是是文檔、圖像等),首先必須做的事情是如何來表達一個對象,即必須抽取一些特征來表示一 個對象,如文本的處理中,常常用詞集合來表示一個文檔,或把文檔表示在向量空間中(稱為VSM模型),然后才能提出不同的分類算法來進行分類;又如在圖像 處理中,我們可以用像素集合來表示一個圖像,后來人們提出了新的特征表示,如SIFT,這種特征在很多圖像處理的應用中表現非常良好,特征選取得好壞對最 終結果的影響非常巨大。因此,選取什么特征對于解決一個實際問題非常的重要。
然而,手工地選取特征是一件非常費力、啟發式的方法,能不能選取好很大程度上靠經驗和運氣;既然手工選取特征不太好,那么能不能自動地學習一些特征 呢?答案是能!Deep Learning就是用來干這個事情的,看它的一個別名Unsupervised Feature Learning,就可以顧名思義了,Unsupervised的意思就是不要人參與特征的選取過程。因此,自動地學習特征的方法,統稱為Deep Learning。
1)Deep Learning的基本思想
假設我們有一個系統S,它有n層(S1,…Sn),它的輸入是I,輸出是O,形象地表示為: I =>S1=>S2=>…..=>Sn => O,如果輸出O等于輸入I,即輸入I經過這個系統變化之后沒有任何的信息損失,保持了不變,這意味著輸入I經過每一層Si都沒有任何的信息損失,即在任何 一層Si,它都是原有信息(即輸入I)的另外一種表示?,F在回到我們的主題Deep Learning,我們需要自動地學習特征,假設我們有一堆輸入I(如一堆圖像或者文本),假設我們設計了一個系統S(有n層),我們通過調整系統中參 數,使得它的輸出仍然是輸入I,那么我們就可以自動地獲取得到輸入I的一系列層次特征,即S1,…, Sn。
另外,前面是假設輸出嚴格地等于輸入,這個限制太嚴格,我們可以略微地放松這個限制,例如我們只要使得輸入與輸出的差別盡可能地小即可,這個放松會導致另外一類不同的Deep Learning方法。上述就是Deep Learning的基本思想。
2)Deep Learning的常用方法
a). AutoEncoder
最簡單的一種方法是利用人工神經網絡的特點,人工神經網絡(ANN)本身就是具有層次結構的系統,如果給定一個神經網絡,我們假設其輸出與輸入是相 同的,然后訓練調整其參數,得到每一層中的權重,自然地,我們就得到了輸入I的幾種不同表示(每一層代表一種表示),這些表示就是特征,在研究中可以發 現,如果在原有的特征中加入這些自動學習得到的特征可以大大提高較精確度,甚至在分類問題中比目前較好的分類算法效果還要好!這種方法稱為 AutoEncoder。當然,我們還可以繼續加上一些約束條件得到新的Deep Learning方法,如如果在AutoEncoder的基礎上加上L1的Regularity限制(L1主要是約束每一層中的節點中大部分都要為0,只 有少數不為0,這就是Sparse名字的來源),我們就可以得到Sparse AutoEncoder方法。
b). Sparse Coding
如果我們把輸出必須和輸入相等的限制放松,同時利用線性代數中基的概念,即O = w1*B1 + W2*B2+….+ Wn*Bn, Bi是基,Wi是系數,我們可以得到這樣一個優化問題:
Min |I – O|
通過求解這個最優化式子,我們可以求得系數Wi和基Bi,這些系數和基礎就是輸入的另外一種近似表達,因此,它們可以特征來表達輸入I,這個過程也是自動學習得到的。如果我們在上述式子上加上L1的Regularity限制,得到:
Min |I – O| + u*(|W1| + |W2| + … + |Wn|)
這種方法被稱為Sparse Coding。
c) Restrict ?Boltzmann Machine (RBM)
假設有一個二部圖,每一層的節點之間沒有鏈接,一層是可視層,即輸入數據層(v),一層是隱藏層(h),如果假設所有的節點都是二值變量節點(只能取0或者1值),同時假設全概率分布p(v, h)滿足Boltzmann 分布,我們稱這個模型是Restrict ?Boltzmann Machine (RBM)。下面我們來看看為什么它是Deep Learning方法。首先,這個模型因為是二部圖,所以在已知v的情況下,所有的隱藏節點之間是條件獨立的,即p(h|v) =p(h1|v)…..p(hn|v)。同理,在已知隱藏層h的情況下,所有的可視節點都是條件獨立的,同時又由于所有的v和h滿足Boltzmann 分布,因此,當輸入v的時候,通過p(h|v) 可以得到隱藏層h,而得到隱藏層h之后,通過p(v|h) 又能得到可視層,通過調整參數,我們就是要使得從隱藏層得到的可視層v1與原來的可視層v如果一樣,那么得到的隱藏層就是可視層另外一種表達,因此隱藏層可以作為可視層輸入數據的特征,所以它就是一種Deep Learning方法。
如果,我們把隱藏層的層數增加,我們可以得到Deep Boltzmann Machine (DBM);如果我們在靠近可視層的部分使用貝葉斯信念網絡(即有向圖模型,當然這里依然限制層中節點之間沒有鏈接),而在最遠離可視層的部分使用 Restrict ?Boltzmann Machine,我們可以得到Deep Belief Net (DBN) 。
當然,還有其它的一些Deep Learning 方法,在這里就不敘述了??傊?,Deep Learning能夠自動地學習出數據的另外一種表示方法,這種表示可以作為特征加入原有問題的特征集合中,從而可以提高學習方法的效果,是目前業界的研究熱點。
原文鏈接:http://blog.csdn.net/xianlingmao/article/details/8478562
三、深度學習(Deep Learning)算法簡介查看論文
Yoshua Bengio, Learning Deep Architectures for AI, Foundations and Trends in Machine Learning, 2(1), 2009
深度(Depth)
從一個輸入中產生一個輸出所涉及的計算可以通過一個流向圖(flow graph)來表示:流向圖是一種能夠表示計算的圖,在這種圖中每一個節點表示一個基本的計算并且一個計算的值(計算的結果被應用到這個節點的孩子節點的 值)??紤]這樣一個計算集合,它可以被允許在每一個節點和可能的圖結構中,并定義了一個函數族。輸入節點沒有孩子,輸出節點沒有父親。
對于表達sin(a^2+b/a) 的流向圖,可以通過一個有兩個輸入節點a和b的圖表示,其中一個節點通過使用a和b作為輸入(例如作為孩子)來表示b/a ;一個節點僅使用a作為輸入來表示平方;一個節點使用a^2和b/a 作為輸入來表示加法項(其值為a^2+b/a);最后一個輸出節點利用一個多帶帶的來自于加法節點的輸入計算SIN。
這種流向圖的一個特別屬性是深度(depth):從一個輸入到一個輸出的最長路徑的長度。
傳統的前饋神經網絡能夠被看做擁有等于層數的深度(比如對于輸出層為隱層數加1)。SVMs有深度2(一個對應于核輸出或者特征空間,另一個對應于所產生輸出的線性混合)。
深度架構的動機
學習基于深度架構的學習算法的主要動機是:
不充分的深度是有害的;
大腦有一個深度架構;
認知過程是深度的;
在許多情形中深度2就足夠(比如logical gates, formal [threshold] neurons, sigmoid-neurons, Radial Basis Function [RBF] units like in SVMs)表示任何一個帶有給定目標精度的函數。但是其代價是:圖中所需要的節點數(比如計算和參數數量)可能變的非常大。理論結果證實那些事實上所需要 的節點數隨著輸入的大小指數增長的函數族是存在的。這一點已經在logical gates, formal [threshold] neurons 和rbf單元中得到證實。在后者中Hastad說明了但深度是d時,函數族可以被有效地(緊地)使用O(n)個節點(對于n個輸入)來表示,但是如果深度 被限制為d-1,則需要指數數量的節點數O(2^n)。
我們可以將深度架構看做一種因子分解。大部分隨機選擇的函數不能被有效地表示,無論是用深地或者淺的架構。但是許多能夠有效地被深度架構表示的卻不能被用淺的架構高效表示(see the polynomials example in the Bengio survey paper)。一個緊的和深度的表示的存在意味著在潛在的可被表示的函數中存在某種結構。如果不存在任何結構,那將不可能很好地泛化。
大腦有一個深度架構例如,視覺皮質得到了很好的研究,并顯示出一系列的區域,在每一個這種區域中包含一個輸入的表示和從一個到另一個的信號流(這里忽略了在一些層次并 行路徑上的關聯,因此更復雜)。這個特征層次的每一層表示在一個不同的抽象層上的輸入,并在層次的更上層有著更多的抽象特征,他們根據低層特征定義。
需要注意的是大腦中的表示是在中間緊密分布并且純局部:他們是稀疏的:1%的神經元是同時活動的。給定大量的神經元,任然有一個非常高效地(指數級高效)表示。
認知過程看起來是深度的人類層次化地組織思想和概念;
人類首先學習簡單的概念,然后用他們去表示更抽象的;
工程師將任務分解成多個抽象層次去處理;
學習/發現這些概念(知識工程由于沒有反省而失?。?是很美好的。對語言可表達的概念的反省也建議我們一個稀疏的表示:僅所有可能單詞/概念中的一個小的部分是可被應用到一個特別的輸入(一個視覺場景)。
學習深度架構的突破
2006年前,嘗試訓練深度架構都失敗了:訓練一個深度有監督前饋神經網絡趨向于產生壞的結果(同時在訓練和測試誤差中),然后將其變淺為1(1或者2個隱層)。
2006年的3篇論文改變了這種狀況,由Hinton的革命性的在深度信念網(Deep Belief Networks, DBNs)上的工作所引領:
Hinton, G. E., Osindero, S. and Teh, Y., A fast learning algorithm for deep belief nets .Neural Computation 18:1527-1554, 2006
Yoshua Bengio, Pascal Lamblin, Dan Popovici and Hugo Larochelle, Greedy Layer-Wise Training of Deep Networks, in J. Platt et al. (Eds), Advances in Neural Information Processing Systems 19 (NIPS 2006), pp. 153-160, MIT Press, 2007
Marc’Aurelio Ranzato, Christopher Poultney, Sumit Chopra and Yann LeCun Efficient Learning of Sparse Representations with an Energy-Based Model, in J. Platt et al. (Eds), Advances in Neural Information Processing Systems (NIPS 2006), MIT Press, 2007
在這三篇論文中以下主要原理被發現:
表示的無監督學習被用于(預)訓練每一層;
在一個時間里的一個層次的無監督訓練,接著之前訓練的層次。在每一層學習到的表示作為下一層的輸入;
用無監督訓練來調整所有層(加上一個或者更多的用于產生預測的附加層);
DBNs在每一層中利用用于表示的無監督學習RBMs。Bengio et al paper 探討和對比了RBMs和auto-encoders(通過一個表示的瓶頸內在層預測輸入的神經網絡)。Ranzato et al paper在一個convolutional架構的上下文中使用稀疏auto-encoders(類似于稀疏編碼)。Auto-encoders和 convolutional架構將在以后的課程中講解。
從2006年以來,大量的關于深度學習的論文被發表,一些探討了其他原理來引導中間表示的訓練,查看Learning Deep Architectures for AI
原文鏈接: http://www.cnblogs.com/ysjxw/archive/2011/10/08/2201782.html
四、拓展學習推薦Deep Learning 經典閱讀材料:
The monograph or review paper Learning Deep Architectures for AI (Foundations & Trends in Machine Learning, 2009).
The ICML 2009 Workshop on Learning Feature Hierarchies webpage has a list of references.
The LISA public wiki has a reading list and a bibliography.
Geoff Hinton has readings from last year’s NIPS tutorial.
Deep Learning工具—— Theano:
Theano是deep learning的Python庫,要求首先熟悉Python語言和numpy,建議讀者先看Theano basic tutorial,然后按照Getting Started 下載相關數據并用gradient descent的方法進行學習。
學習了Theano的基本方法后,可以練習寫以下幾個算法:
有監督學習:
Logistic Regression - using Theano for something simple
Multilayer perceptron - introduction to layers
Deep Convolutional Network - a simplified version of LeNet5
無監督學習:
Auto Encoders, Denoising Autoencoders - description of autoencoders
Stacked Denoising Auto-Encoders - easy steps into unsupervised pre-training for deep nets
Restricted Boltzmann Machines - single layer generative RBM model
Deep Belief Networks - unsupervised generative pre-training of stacked RBMs followed by supervised fine-tuning
最后呢,推薦給大家基本ML的書籍:
Chris Bishop, “Pattern Recognition and Machine Learning”, 2007
Simon Haykin, “Neural Networks: a Comprehensive Foundation”, 2009 (3rd edition)
Richard O. Duda, Peter E. Hart and David G. Stork, “Pattern Classification”, 2001 (2nd edition)
原文鏈接:http://blog.csdn.net/abcjennifer/article/details/7826917
五、應用實例1、計算機視覺。
ImageNet Classification with Deep Convolutional Neural Networks, Alex Krizhevsky, Ilya Sutskever, Geoffrey E Hinton, NIPS 2012.
Learning Hierarchical Features for Scene Labeling, Clement Farabet, Camille Couprie, Laurent Najman and Yann LeCun, IEEE Transactions on Pattern Analysis and Machine Intelligence, 2013.
Learning Convolutional Feature Hierachies for Visual Recognition, Koray Kavukcuoglu, Pierre Sermanet, Y-Lan Boureau, Karol Gregor, Michaël Mathieu and Yann LeCun, Advances in Neural Information Processing Systems (NIPS 2010), 23, 2010.
2、語音識別。
微軟研究人員通過與hintion合作,首先將RBM和DBN引入到語音識別聲學模型訓練中,并且在大詞匯量語音識別系統中獲得巨大成功,使得語音 識別的錯誤率相對減低30%。但是,DNN還沒有有效的并行快速算法,目前,很多研究機構都是在利用大規模數據語料通過GPU平臺提高DNN聲學模型的訓 練效率。
在國際上,IBM、google等公司都快速進行了DNN語音識別的研究,并且速度飛快。
國內方面,科大訊飛、百度、中科院自動化所等公司或研究單位,也在進行深度學習在語音識別上的研究。
3、自然語言處理等其他領域
很多機構在開展研究,但目前深度學習在自然語言處理方面還沒有產生系統性的突破。
六、參考鏈接:1.http://baike.baidu.com/view/9964678.htm?subLemmaId=10105430&fromenter=deep+learning
2.http://www.cnblogs.com/ysjxw/archive/2011/10/08/2201819.html
3.http://blog.csdn.net/abcjennifer/article/details/7826917
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/4280.html
摘要:通過書籍學習,比如除了上述的先學知識,你還應該了解一些流行的深度學習庫和運行他們的語言。你也可以查看查看的中的第講,概要性的了解一些深度學習庫。 作者:chen_h微信號 & QQ:862251340微信公眾號:coderpai簡書地址:https://www.jianshu.com/p/cd0... 原文:https://www.analyticsvidhya.c... 介紹 ...
閱讀 2469·2021-11-17 09:33
閱讀 757·2021-11-04 16:13
閱讀 1328·2021-10-14 09:50
閱讀 691·2019-08-30 15:53
閱讀 3657·2019-08-30 14:18
閱讀 3267·2019-08-30 14:14
閱讀 2092·2019-08-30 12:46
閱讀 3177·2019-08-26 14:05