[譯] 作為普通 Ruby 開發,我如何從零轉型機器學習
作者 | Alexey Gaziev
譯者 | Sambodhi Liou
編輯 | Vincent
AI 前線導讀:本文講述的是一名軟體工程師踏上機器學習漫漫不歸路的故事。Alexey Gaziev,是 Amplifr(https://amplifr.com/)的首席技術官,分享了他從 Ruby 開發者轉型到深度學習愛好者的歷程中所取得的心得經驗,併為我們提供瞭如何從零開始學習深度學習,並充分利用改變人生的經驗技巧。 本文由作者 Alexey Gaziev 授權在 AI 前線翻譯釋出 。
更多優質內容請關注微信公眾號“AI 前線”(ID:ai-front)
讓我們從描繪想象的肖像開始,看看你是否認出了你自己,還是你所認識的人。
你是一名軟體工程師,每天都與程式碼打交道,構建複雜的東西,將業務需求轉化為應用程式的邏輯,並按時交付。你嘗試過不同的程式設計開發語言,並選擇了你趁手的兵器。你對自己的工作充滿了信心,並準備好去學習一些全新的東西,這些東西會賦予你新的能力,讓你在這個職業中與時俱進。
關於人工智慧是“新能源”的言論一直不絕於耳。得益於機器學習的進步,整個行業因此發生了變化。而最樂觀的研究人員將人工智慧的興起比作工業革命。
這場革命貫穿你的生涯,你想投身其中。你想知曉有關人工智慧、機器學習、深度學習的更多知識並進行實驗,但你不知道應該從哪入手。
大家好,我叫 Alexey,兩年前我就是上面描述的那種人。今天,我在 Amplifr 負責機器學習。Amplifr 是一家社交媒體管理初創公司,我擔任首席技術官。我仍然密切關注“傳統”的程式碼:畢竟我們的應用是基於 Ruby on Rails 開發的。雖然沒有在我們的主要程式碼庫上工作,但我參加了機器學習競賽(最近在一個主要的 NLP 競賽中獲獎,http://u6.gg/eH8Cp),還參加了人工智慧會議,閱讀學術論文,每天進行實驗並探索如何運用機器學習使 Amplifr 在競爭中脫穎而出。
AI 前線注:Ruby on Rails(官方簡稱為 Rails。也有人簡稱為 RoR,該縮寫目前仍於一些中文討論中被使用。),是一個使用 Ruby 語言寫的開源 Web 應用框架,它是嚴格按照 MVC 結構開發的。它努力使自身保持簡單,來使實際的應用開發時的程式碼更少,使用最少的配置。
一般的經驗法則是,所有現代人工神經網路(RNN、CNN、DBN、DQN,總帶有一個“N”字母,如“網路”) 都屬於深度學習。
首先,讓我們先澄清是非。“正確”地使用人工智慧、機器學習和深度學習等術語是一個永無止境的爭論話題,很快就會讓初學者感到迷茫,無所適從。為了簡單起見,我們將機器學習視為來自人工智慧的一組工具,深度學習是它們的一個特定子集。在我這份筆記中,所有三個術語都可互換,但主要是在深度學習的背景之下。
剛入門機器學習的新鮮感猶如昨日,因此,我想給那些剛開始探索這一新領域的菜鳥們提供一些建議。
1. 不要擔心
假設你對數學不怎麼感冒,就我個人而言,八年前,我從理工學院畢業之後,就再也沒有碰過數學教科書了(至少在我開始學習深度學習之前是這樣)。你要知道它究竟是怎麼回事:你閱讀語言、框架文件的頻率可比其他任何東西高多了。
經過一些初步的 Google 搜尋,並與周圍的數學高手交談之後,我得到一種印象,以下羅列的是你在嘗試用神經網路解決現實問題之前就需要積累的數學知識。至少,我兩年前的印象是這樣的:
-
掌握線性代數。
-
熟悉概率論。
-
學習所有經典的機器學習概念,從線性迴歸開始。
-
學習如何處理資料集,提取特徵、引數微調以及發展直覺,瞭解哪種特定演算法適合手頭的任務。
-
熟悉深度學習框架 / 庫(我那會兒是 Theano 和 Torch 的天下,現在可能是 PyTorch、TensorFlow 和 Keras 大行其道)。
據一些專家說,只有掌握上述提到的所有知識之後,你才能夠解決一些實際的問題,比如區分貓和狗。
如果你的情況與我類似,上面的清單就足以讓你產生畏難情緒,並導致拖延症發作。
不過別擔心!雖然從技術上來說,上述列表中所有的內容都是適用的,但這些並非入門級要求。如果你知道如何程式設計,那麼你就已經知道如何訓練模型。
2. 記住,它仍然是程式碼
看看這段程式碼:
從這段程式碼中,你能得到什麼資訊呢?
-
這是一段用 Python 編寫的程式碼。
-
它使用了 fastai 深度學習庫。
-
它只有三行(不包括 import)。
-
resnet34 在這裡似乎很重要。經搜尋之後,我們知道了原因:https://www.kaggle.com/pytorch/resnet34/home
這是來自 Jermy Howard 教授的 fast.ai 課程中的一個例子,這門課程很棒,而且免費。Jeremy 倡導的理念是:從預先準備好的抽象概念開始,只有經過一些實踐練習後,才能深入挖掘。
上面的程式碼調整了預訓練的影象分類模型(在 ImageNet 上訓練,大約 1500 萬張影象的資料集),這樣它就可以解決前面提到的 Dogs vs. Cats 任務。它在短短三個輪數之內(通過資料傳遞)就達到了 98% 的準確率。在配備 GPU 的計算機上進行訓練需要 17 秒鐘。這些結果使長久以來未能解決同樣問題的嘗試得到迎刃而解。
當然,別看只有短短三行程式碼,要知道這三行程式碼背後凝聚了多年的研究、數十篇學術論文和數千小時的反覆試驗。但這些都是你現在可用的幾行程式碼。一旦你掌握了為你自己的用例對圖片進行分類(並在生產中進行使用)的要點,那麼就跟區分貓和狗沒有什麼區別了。
3. 找一個合作伙伴
我更願意將自己視為一個勤勞的人,一個善於學習的人。作為一名初出茅廬的程式設計師,我是從微軟產品開始接觸 C# 和.NET 的。不久之後,我就發現了 Ruby 的美和表現力,並轉投到 Rails 中,最終成為了一名優秀的 Ruby 程式設計師,並通過 Evil Martians 為初級開發人員而設的面試挑戰。我在一家以內部專案起家的初創公司很快升任為 CTO。同時,我還開發了一些 Ruby gems(gon 在 Rails 社群中非常受歡迎),在會議上發言,在最佳實踐方面為開發人員提供一些指導,當你是 Evil Martians 團隊的一員時,一切照舊。當然,我也相信改變觀點的好處。在使用 Ruby 全職工作期間,我還涉足了 C++、Haskell。JavaScript 以及有些晦澀難懂的 Eve。
在我的業餘時間裡,我喜歡彈低音大提琴和吉他,還喜歡畫油畫、衝浪。
儘管如此,拖延症對我來說也不是什麼新鮮事:在我工作效率很低的時候,我經常追劇,把時間浪費在 MMORPG(Massive Multiplayer Online Role Playing Games,大型多人線上角色扮演遊戲)以及奇幻小說上,畢竟我是個書呆子。
當我準備涉足機器學習,尤其是深度學習時,我和我朋友那會兒正是《風暴英雄》(Heroes of the Storm)多人線上競技遊戲的玩家。
為了讓自己在通往新知識的漫長道路上邁出第一步,我必須與同樣夢想著人工智慧的朋友達成協議。我們決定一起治癒拖延症,參加相同的課程,互相督促學習。現在我們經常一起參加比賽。
如果你的線下朋友都不願意和你一起學習,那麼網際網路就是你的朋友:網上有很多地方,你可以找到其他初學者一起學習。
AI 前線注:網上有很多這樣的地方,如 http://u6.gg/eH96j、http://u6.gg/eH96U、http://u6.gg/eH97m 等,都是值得一去的地方。
4. 避免認知超載
眾所周知,學習太難的東西是一種令人沮喪的經歷。作為人類,我們有信心避免沮喪。與此同時,學習太容易的東西也不會讓你滿意:你很快就會失去任何動力。關鍵是要儘可能的咬牙堅持下去。
我參加的第一個線上課程是 Udacity 的 Deep Learning Nanodegree(深度學習奈米學位):這是一個昂貴的計劃(現在 999 美元,我當時花了大約 400 美元),承諾為期四個月的理論入門以及將所學知識應用於現實世界所需的實踐。作為獎勵,修完這門課程後,參加 Self-Driving Cars Nanodegree(無人自駕車奈米學位)的線上課程可以享受折扣。
AI 前線注:奈米學位(Nanodegree)是美國出現的新型學位憑證,這一類憑證專為企業定製並輸送專門人才,能實現定製型人才的快速就業,它具有針對性強、技術難度不高、就業快捷、市場需求量大等特點。Deep Learning Nanodegree 見 http://u6.gg/eH9Cd。Self-Driving Cars Nanodegree 見 http://u6.gg/eH9EB。
我錯在深陷其中,不能自拔。首先,沒有覆蓋到我的基礎。當我對課程中提到的一些概念感到吃力時,我就驚慌失措,開始閱讀網上所能找到的一些:文章、書籍和其他課程。
結果,我無法專注於本應給我打下基礎的資料。事後看來,我強烈建議你堅持學習一門課程,而不是同時學習多門課程。畢竟,人類在多工處理方面的能力是出了名的差。
如果我現在開始的話,我會先看看 Jeremy Howard 的 fast.ai,前面我已經提過,還有 Andrew Ng 最新的 Coursera(有個證書費用,但你可免費獲得)。它包含五門課程:從神經網路概述、深度學習、通過發現卷積神經網路(對處理影象資料至關重要),到序列模型(語音識別、音樂合成、任何時間序列資料)。
第二門課程更側重於理論,而第一門課程強調的是“快速而隨性”的實現,我認為這是最好的入門方法。只要記住調整自己的步調,避開同時處理多工,並採取一些較小的步驟。
5. 設定目標
不要試圖一次學完所有的東西,要試著選擇那些使用深度學習技術能夠給你個人帶來滿意結果的領域。處理與你相關的事情(而非處理隨機抽象資料點),會讓你保持積極性。你需要一個反饋迴圈,一種從實驗中獲得實際結果的方法。
以下是啟動專案的一些想法:
-
如果你熱衷視覺藝術(如電影、攝影、視訊、美術等),那就去鑽研計算機視覺吧。神經網路用來對影象上的物件進行分類,突出顯示感興趣的區域(如核磁共振掃描的異常或道路上的行人),檢測肖像的情感或年齡,藝術風格遷移,甚至生產原創藝術品(http://u6.gg/eHAa6)。
-
如果你對聲音更感興趣,你可以像 Spotify 那樣(http://u6.gg/eHBaa、http://u6.gg/eHBab),用神經網路進行譜曲(http://u6.gg/eHAXs)、分類和推薦新曲目。或者,你可以探索語音風格的轉換,並加裝用別人的聲音說話(http://u6.gg/eHBbp)。
-
如果你喜歡電子遊戲,你一定要看看強化學習。你可以訓練一個遊戲智慧體,在你最喜歡的遊戲中超越你自己的表現。而且,你可以用智慧體進行電子遊戲,沒有人會因此責怪你,因為你懂得,以研究的名義。
-
如果你熱衷於使用者體驗和客戶支援,請參閱自然語言處理和聊天機器人,這樣你就可以在一定程度上自動化地與客戶進行交流:從聊天內容揣測客戶的意圖,對支援票證進行分類,為大多數常見問題提供即時答案。
在嘗試計算機視覺領域之後,我和朋友將注意力轉向了自動語音識別(Automatic Speech Recognition,ACR)和自然語言處理。看看行業巨頭(Google、Apple 等)支援的無人駕駛汽車專案,就知道計算機視覺現在可能是資金最多的研究領域,也是深度學習技術鞏固地位的領域:在影象分類這塊,神經網路預測的準確率從 2010 年低於 75% 增長到 2018 年的 98%。
另一方面,與語言相關的挑戰(尤其是那些與書面語言有關的挑戰),最近才開始從神經網路中受益。目前最熱門的領域是機器翻譯(Machine Translation,MT)。人們可能會注意到,Google 翻譯的質量在過去幾年來有了很大的提高。自 2015 年以來,深度學習在其中起到了重要的作用(詳見 http://u6.gg/eHBdX、http://u6.gg/eHBdY)。
注:造成這種延遲的主要原因是硬體限制:機器翻譯任務需要大量的記憶體和處理能力來訓練大型神經網路。
要想知道深度學習改變一個幾十年來未見重大進展的研究領域的速度有多快,看看下面一個有趣的事實就知道了:
機器翻譯競賽中首次出現神經網路的影子,僅僅就在三年前的 2015 年。到了 2016 年,機器翻譯競賽中 90% 的競爭者都是基於神經網路。
從關於這個主題的學術論文中可以提取大量的知識,並應用到現實世界的任務中,特別是如果你的初創公司與文字(和 Amplifr)相關的話。
如果這些能夠說服你自己嘗試將深度學習應用到自然語言處理,那麼請看看 Stanford 的 CS224n 課程:“Natural Language Processing with Deep Learning”(用深度學習進行自然語言處理)(https://web.stanford.edu/class/cs224n/)。你不必非得是斯坦福大學的學生才能學習這門課程,所有的講課視訊都可以在 YouTube 上找到。如果你在小組討論中取得最佳進展,那麼就可以使用社交新聞網站 Reddit 專為該課程開設的整個子版塊(https://www.reddit.com/r/CS224n/),在這裡你可以找到同學這門課程的線上學習夥伴。
6. 競爭力
機器學習領域本質上是充滿了競爭的。全球最大的資料科學家和機器學習從業者的社群 Kaggle,早在 2010 年就將黑客馬拉松的精神引入了這一學術領域。從那時起,解決機器學習任務的競爭方式就成為了標準做法。從 Microsoft 到 CERN(歐洲核子研究組織)的公司和機構都為解決挑戰提供了獎勵,以換取免版稅的許可,讓他們可以使用獲獎作品背後的技術。
機器學習競賽是評估你技能的最佳方式,能夠讓你在某個領域獲得“基準線”的感覺,從更高階的競爭對手那裡獲得靈感,找到同事合作,而且還能讓你在機器學習領域中名揚天下。
參加競賽是機器學習業餘從業者的必經之路。對我和朋友來說,認識到這一點是在 2017 年,也就是我們開始自學的那一年。我們在 Kaggle 選擇了 Understanding the Amazon from Space(在太空中瞭解亞馬遜)競賽專案(http://u6.gg/eHBjM),因為這是我們進行多分類影象分類的機會(我們也關心環境)。兩個多月以來的每個週末,我們都在解決這個任務:從衛星影象中檢測森林砍伐情況,並區分其原因。
另一個跡象表明,所有與深度學習相關的事情都在迅速發展:一年前,我們花了大量的時間和精力設法讓 Google Cloud Platform 以更低的成本來執行我們的實驗。到了今天,Google 提供了一個免費的 GPU 支援的 Jupyter notebook 環境(http://u6.gg/eHBmT),並且有很多服務可以用來訓練你的模型(https://www.paperspace.com/、https://www.floydhub.com/)。
我們雖然沒有拿到獎品,但我們在排行榜上位列前 15%(這沒有什麼可吹噓的),在書中列舉了每個初學者會犯下的錯誤,這些經驗都是無價的:我們獲得了繼續努力的信心,並選擇下一場競賽,這次是自然語言處理的領域。
開發問答系統的挑戰是由一家俄羅斯主要銀行主辦(http://u6.gg/eHBqW),競爭者必須使用一個由著名的 SQUAD 精神建立的獨特資料集(斯坦福大學的閱讀理解資料集,由志願者基於維基百科文章集建立的 15 萬個問題組成)(http://u6.gg/eHBrG),但這一次是俄文版的。
注:俄語是一種形態豐富的語言,在自然語言處理研究中被認為資源不足,更多詳情請參閱此論文:http://worldcomp-proceedings.com/proc/p2015/ICA7022.pdf
這個任務是訓練一個系統,回答基於一段文字的問題。這個模型可以在 Docker 容器中提交(RAM 被限制為 8GB),它應該能夠在一個以自然語言提問的問題中突出顯示文字段落中的相關部分。因為在最具挑戰性的比賽中,經常會出現這種情況,因此我們不得不提交未經訓練的模型,而是一個解決方案,必須在兩個小時的機器時間內完全訓練並給出測試問題的答案(為確保公平競爭,測試資料集僅部分公開)。
我們的解決方案在公共排行榜上位列亞軍,但我們太過專注於解決任務,忘記正確閱讀競賽規則:他們說團隊合作是禁止的,只接受個人參賽專案。我們不得不全盤招供,並獲得了“安慰獎”銅獎(這一獎項有點像戛納電影節的獎項,當電影作為“非競賽片”展映時)。
我們很幸運地避免了被取消比賽資格的厄運,但我們汲取了教訓。現在,我強烈建議大家參賽時不要衝動,一定要花點時間仔細閱讀競賽規則。
由於我對深度學習的興趣主要是以生產為導向的(提出解決方案,可以應用於我的創業公司的實際需求),我還注意到,檢視排行榜可以讓你很好地瞭解“接近生產”的程度。頂級的解決方案通常是學術性的,尚未做好準備進行商業部署。而銀獎、銅獎以及後面的一些解決方案通常是最有希望的應用。
7. 隨時瞭解動態
深度學習領域不斷髮展的步伐有兩面性:有好處也有壞處。甚至這篇文章(作為介紹性質的、個人的和非學術性的)在發表之前可能在某些方面就已經過時了。
保持最新狀態的最佳方式,就是加入到擁有大量機器學習愛好者的大型線上論壇。如果你瞭解俄語,那麼一定要加入 Open Data Science(開發資料科學社群,http://ods.ai/):擁有超過 12000 名使用者和 140 多個公共頻道的公共 Slack 伺服器。通過 Reddit 的 r/MachineLearning 子版塊或 Meetup.com,總能找到更小的、更多的本地群組。
建立一個 Twitter 訂閱源(http://u6.gg/eHCAU)和郵件訂閱(http://u6.gg/eHCB7)對於隨時瞭解動態也是至關重要的。你還可以把時間投入到世界各地舉辦的各種線下新兵訓練營中。
曾經我以為西班牙的夏令營就是衝浪的,直到我參觀了 Bilbao 的 International Summer School on Deep Learning(深度學習國際暑期學校,http://grammars.grlmc.com/DeepLearn2017/)之後方知並非如此。這是一個草率的決定,但我並不後悔:它完全適合我的水平(我當時加入這個領域有一年了)。在缺乏實踐的情況下,這所學校更像是一個會議,雖然是一個非常緊張的會議:每天上午九點到下午六點,連續五天。整個會程安排被分成了幾個部分,每個演講者都要進行三場為期一個半小時的演講。
一旦你感到更有自信的話,那就試著參加關於人工智慧、機器學習和深度學習的主要會議之一:ICLR(https://iclr.cc/),今年我就有幸參會。其他值得關注的國際會議是 VCPR(特別是計算機視覺)(http://cvpr2018.thecvf.com/)和 NIPS(https://nips.cc/)。
8. 使用你的程式設計技能
我們必須承認一個顯而易見的事實:Python 完全贏得了人工智慧和資料科學社群的支援。在今天,可能沒有理由從一種不同的語言開始,除非你真的很擅長這門語言,或者你計劃處理一些非常低階的優化。
對我來說,作為一名 Ruby 開發人員,切換到 Python 真的是一種簡單、愉快的體驗。你只需幾個禮拜的練習(以及學習陣列索引技巧和理解(http://u6.gg/eHCEP))就可以讓自己感覺舒服一些。但是,我還是花了一些時間來完成一個免費的中級 Python 程式設計課程,當然,上這種課沒有什麼壞處。
對於軟體工程師來說,語言“障礙”並不是什麼問題。但對於非程式設計背景的愛好者來說,進入深度學習領域很難。因此,你已經領先一步了。
但是,你不要指望一些優秀的 OOP 程式碼和直觀的 API。大多數公共程式碼示例在我的團隊中也不能通過嚴格的程式碼審查。這與軟體工程無關,畢竟,這是關於數學的:矩陣乘法需要先把矩陣相乘,乾淨的領域特定語言(Ryby 讓你習慣優秀的 DSL)總是事後才會考慮的事情。
AI 前線注:領域特定語言(domain-specific language,DSL),指的是專注於某個應用程式領域的計算機語言。又譯作領域專用語言。詳見 https://en.wikipedia.org/wiki/Domain-specific_language
即使在同一個庫中,相同的功能也可以有不同的 API。使用 np.ones((2,3))(取一個元組)來建立一個 1 的資料(http://u6.gg/eHCFf)似乎令人困惑,同時使用兩個單獨的證書引數建立相同形狀的隨機數的陣列(http://u6.gg/eHCFM):np.random.randn(2,3)。
另外,不要對文件或風格抱有太高的期望。一旦你在將學術論文翻譯成程式碼時遇到了一些重要的細節,你將不得不閱讀庫的原始碼,而且這並不容易。測試覆蓋率也經常不足。
然而!這是一個很好的利用你最佳程式設計實踐的機會:你可以自由地使用公開的 Jupyter notebook 製作優秀的可重用庫(http://u6.gg/eHCGJ)。
9. 最後,複習一下你的數學
當然,我把最好的心得經驗留在最後。最終,你將不得不縮小你的數學差距。特別是如果你在瞭解了自己的基礎知識之後,願意站在前沿並關注學術出版物的話。
幸運的是,機器學習也有它自己的“聖經”,由 Ian Goodfellow、Yoshua Bengio 和 Aaron Courville 所著的一本長達 800 頁的大塊頭教科書《Deep Learning (Adaptive Computation and Machine Learning)》(深度學習)。好訊息是,這本書可以在網上免費下載!下載網址為:http://www.deeplearningbook.org/
該書的第一部分(線性代數、概率論和資訊理論,數值計算,機器學習基礎知識)是最基本、最簡單的部分,屬於介紹性質的。令人驚訝的是,當你繼續跟進當前的研究時,它已經不那麼令人生畏了。是的,這是長達 130 頁的閱讀,雖然談不上悠閒,但你絕對不會後悔閱讀這部分的內容。
我希望讀者們能夠從這篇文章中,感受到我對深度學習的熱情,讓這一領域對我這樣來自應用程式設計的人來說顯得平易近人。我真的相信,隨著人工智慧和深度學習的進展,這個世界正在接近另一個“電燈泡時刻”,是的,我指的就是愛迪生髮明的那盞燈泡。
像你我這樣的“充滿好奇心的軟體開發者”,將是這場已經開始的革命背後的主要推動力。也許,你並不完全處於科學的前言(否則你可能不會讀到這篇文章),但你有能力實現學術界的最佳創意,那麼,每次一個應用,就是我們改變世界的方式。
所以你繼續前進吧!你可閱讀文章中以及文末我列出的一些資源,建立你的信心,讓我們開始踏上人工智慧征途吧!
有用的資源:
-
Deep Learning Book:http://www.deeplearningbook.org/
-
deeplearning.ai:https://www.deeplearning.ai/
-
Practical Deep Learning For Coders by Jeremy Howard:https://course.fast.ai/
-
Must-read blogs for AI and Deep Learning enthusiasts:https://blog.paralleldots.com/data-science/must-read-blogs-ai-deep-learning-enthusiasts/
-
Some email subscriptions to stay informed:https://becominghuman.ai/6-ai-subscriptions-to-keep-you-informed-4cfc6cb024a
-
Distill.pub:https://evilmartians.com/chronicles/%28https://becominghuman.ai/6-ai-subscriptions-to-keep-you-informed-4cfc6cb024a%29
-
A great recap of matrix calculus for deep learning:http://explained.ai/matrix-calculus/index.html
原文連結:
https://evilmartians.com/chronicles/learning-how-to-learn-deep-learning
今日薦文
點選下方圖片即可閱讀
重磅!騰訊架構大調整,業務重心由2C變2B
精品推薦
近幾年,短視訊應用蓬勃發展,由於短視訊場景下使用者興趣和廣告內容更難以理解,短視訊廣告在使用者內容理解、召回、排序和機制上都會遇到更大挑戰。基於快手海量的使用者和視訊資料,利用 AI 相關技術,可以更好的解決這些問題。
AICon 全球人工智慧與機器學習技術大會上,快手短視訊商業化模型方向負責人孔東營將會為我們帶來“機器學習在短視訊商業化中如何應用”相關議題的精彩分享。
除了機器學習,更多計算機視覺、NLP、自動駕駛、知識圖譜、搜尋推薦與演算法、AI 工具與框架等熱門議題歡迎掃描下方二維碼或點選“閱讀原文”瞭解詳情。目前大會報名八折優惠中,詳情諮詢:18514549229(同微信)。
如果你喜歡這篇文章,或希望看到更多類似優質報道,記得給我留言和點贊哦!