2019谷歌開發者大會(GDD)參會心得

Day1

首先來到的是主會場的本次大會開幕主旨演講,帶來了本次大會的重點:grow with google成長計劃、Android 十、firebase、 flutter1.九、wear OS、ARCore等等,以及明天會花整整一天的重頭:tensorflow專場。javascript

想聽的東西不少,可是因爲分了4個會場同時進行,因此只能挑一些最感興趣的內容,難免有些遺憾。java

關於機器學習ios

tensorflow做爲google的機器學習框架,在Keras的加入之後如虎添翼。本次的機器學習簡介中就以tensorflow的幾個例子入手進行了介紹。git

如今的機器學習已經發展到了深度學習的階段,在這之中最具表明性的就是深度神經網絡學習,也就是用一個模型來模擬人類神經網絡的思考過程。github

人類神經網絡的組成就是一個個的神經元,在機器學習中則以無數個變量來模擬這一個個的神經元,他們組成的網絡就是機器神經網絡。web

以手寫數字的識別爲例,主講人首先以普通的神經網絡進行入門,再與卷積神經網絡進行對比,在神經元(變量)的數量遠遠小於普通神經網絡數量的狀況下將錯誤率降低了50%,足以說明了卷積神經網絡的強大。算法

而人類社會不只僅是手寫數字的識別,畢竟手寫數字只有0-9這10種分類。redux

而目前公認的比較高效的VGG16卷積神經網絡在圖像識別領域中的應用,能夠很輕鬆的將這分類擴展至1000甚至更多。api

而且因爲遷移學習,咱們能夠將神經網絡的兩部分特徵提取和分類分開建立和使用,使得能夠將已經建立並訓練好的模型進行組合,提升了訓練的效率下降了開發成本。而且tensorflow hub上已經有不少模型能夠供其餘開發者進行復用。安全

而在tensorflow的開發、構建和佈署方面也是有一整套的解決方案,開發者能夠將建立好的模型進行訓練,這部分的開發和構建工做徹底能夠在一個獨立的環境中進行。

而後能夠將訓練好的模型單獨導出保存,再部署到各個須要的地方,好比服務器端有tensorflow serving,移動端有tensorflow lite,web端有tensorflow js,甚至還有各類其餘語言的支持。

而且有了ML Kit和google cloud的加持,相信之後的發展必定會很是不錯。

今天的機器學習只是一個簡介,很是期待明天的tensorflow專場。

關於kotlin

kotlin從2011年出現開始到如今已經成爲Android官方支持的開發語言,而且在Android上甚至有替代java的趨勢,主講人也一次次的強調在Android方面kotlin的優先戰略。

他能夠直接編譯爲java字節碼在JVM環境下運行,也能夠編譯爲javascript在沒有JVM環境的設備上運行,這也是他的優點之一。

在安全性方面也較java有很大提高,能夠將不少的異常在編譯階段就暴露出來,沒必要擔憂在運行時發生。

在簡潔性方面更是超出java一大截,定義一個簡單的javabean須要定義成員變量和setget方法,而在kotlin中只要一行就能夠搞定。

而kotlin的擴展庫KTX更是將這一主旨體現到了極致,極大的簡化了開發者的開發量。

而且kotlin還原生支持協程,只要在方法定義上加上suspend關鍵字,就能夠在使用異步協程的狀況下又不用以回調這種很是影響代碼閱讀的方式實現。

(關於這點,有點相似javascript中解決「回調地獄」問題的時候使用的asnyc/await。)

再加上Android studio 3.5中自帶的遷移工具支持,大大的簡化了java代碼重構成kotlin的工做量。

kotlin自己就是編譯爲java字節碼文件,因此和java是能夠互相調用的(在工做中其實已經發現不少很是好的第三方工具備重構成了kotlin版,好比okhttp4)。

關於flutter

flutter是一個移動端UI框架,由dart語言編寫,也支持原生混合開發。徹底dart開發的項目能夠不改一行代碼直接編譯成ios和Android的app。

主講人一次次的強調flutter的四大優點:美觀、快速、高效、開源。

美觀:使用flutter能夠開發出很漂亮的用戶界面。

快速:在Android studio 3.5下,flutter的熱重載能夠幫助開發者快速的在模擬器中直接得到修改後的結果。

高效:支持ios和Android開發,不須要一個功能在兩個平臺上開發兩次,而且能夠很是完美的兼容各類設備各類分辨率。而且因爲是同一套代碼,測試的壓力也減小不少。

開源:項目已經在github開源,而且也有獨立的中文社區。

就在今天flutter發佈了1.9最新版,將web分支也合併進了主分支中,這樣flutter僅僅須要一行編譯命令就能夠將代碼編譯成javascript在web端運行。

國內幾個知名公司也上臺分享了flutter的應用,阿里、騰訊、字節跳動等大廠,在新項目或者週期比較緊張的狀況下也會選擇flutter。

阿里巴巴的閒魚也在今年上半年開源了flutter應用框架fish redux,flutter中文社區也在不斷的壯大。

Day2

今天一天整個主會場都成了tensorflow專場,由於對tensorflow更爲感興趣因此就沒有去其餘會場。

一開場主講人就介紹了目前機器學習在各個領域的運用,以及在將來的發展方向。

之前就瞭解到人工智能的三起三落,主講人也提到了這一次機器學習將會有一個爆發是的發展,由於這是一個天時地利人和都集齊的時代。

與以前相比,這個時代有了大數據的加持,經過愈來愈多的技術手段咱們能夠從行行業業收集到各式各樣的數據;

與以前相比,這個時代的計算機算力獲得了飛速發展,普通臺式機、筆記本都是之前大型服務器算力的幾千上萬倍,而組成集羣化的服務器集羣算力更是之前的百萬億萬倍;

與以前相比,這個時代有了更先進的機器學習模型,神經網絡的出現使得模型的構建更加方便。

關於tensorflow2.0

今年以來,tensorflow2.0一直在alpha版徘徊,就在今天主講人宣佈了tensorflow2.0正式發佈(TensorFlow 2.0 RC),若是使用keras接口開發的1.X版本項目幾乎能夠直接遷移到2.0版本。

本次2.0版本的升級主要是在:

1.整合和清理了大量的API;

2.默認啓用Eager execution模式,再也不須要經過session來管理和運行計算圖;

3.將keras做爲這個版本的核心高級API,使建模更簡捷;

4.支持分佈式策略tf.distribute.Strategy;

5.新的模型結果保存格式,支持更多的平臺

另外,經過繼承keras的Layer類,用戶能夠自定義神經網絡層;經過繼承Model類,能夠自定義模型;經過繼承GradientTape類,能夠自定義訓練過程。

再有經過tensorflow serving將服務延伸到服務器端;經過tensorflow lite將服務延伸至移動端甚至單片機;經過tensorflow js將服務延伸至web及其餘js環境。

新加入了這麼多支持的平臺,提升了開發佈署上的複雜度,可是沒關係,此次的tensorflow extended能夠完美解決這個問題。

tensorboard在可視化方面支持tensorflow2.0,甚至能夠監控模型在訓練時的性能,可以幫助開發者對模型進行調優。

對於tensorflow1.X的舊項目,本次也提供了代碼遷移指南和自動轉換腳本tf_upgrade_v2,而且也保留了部分老的api在tf.compat.v1中,幫助開發者平滑遷移。

關於tensorflow text

tf.text是tensorflow的天然語言處理模型,用於對文字語言進行分詞和語義分析。

最先google是經過循環神經網絡與轉換模型來實現天然語言處理的。 在第二階段google研發了BERT做爲替代品,而且這個模型以及其變形在天然語言處理的模型中一直都名列前茅。

目前google的第三代天然語言處理模型XLNet以碾壓BERT的存在出現,而且也已經開源。

由於tensorflow的計算內容爲tensor,而通常數據包括圖片在內都很容易可以轉化爲tensor,可是天然語言卻不行。

因此在tf.text中引入了新的數據格式RaggedTensors來表示這類新的tensor,而後經過tokenizer對其進行分詞操做,這樣就完成了天然語言處理的第一步。

關於tensorflow lite

tensorflow的普通版功能強大,可是不適合在移動和物聯網設備上運行,由於移動設備和物聯網設備有着三個主要的問題:算力不夠、內存不大、電量不足。

算力不足致使計算延遲變大、內存不足致使沒有足夠的空間加載模型、電量不足直接影響設備的續航,而tensorflow lite就是爲了解決這三個問題而出現的。

tensorflow lite能夠優化對cpu、gpu、dsp、npu的利用方式直接使用各類芯片的指令集和算子實現硬件加速,而且和各大硬件廠商的合做過程當中使愈來愈多的芯片原生支持愈來愈多的指令集和算子。

在tensorflow lite平臺上使用專門爲移動端優化過的mobilnet模型架構,使在這個平臺上運行的模型從架構層面就直接適配移動端。

同時針對tensorflow lite平臺,google推出了模型優化工具包,主要是經過量化和剪枝的方式來優化和縮小模型的大小以適應tensorflow lite平臺,而量化和剪枝是兩個獨立的方式,而且能夠同時使用。

量化的意思是下降模型運算的精度,使用int8來代替float32的運算,這樣直接能夠將模型大小減小到原來的1/4,而且根據特殊的映射算法是的模型的運算結果幾乎保持了原來的精度,只是略有降低而已。

剪枝的意思是將權重比較低的值直接剪掉丟棄,這個方法不一樣於模型計算中的dropout運算,開發者能夠自定義剪枝的比例,實驗代表剪枝的比例在大於60%的狀況下模型的計算精度纔有明顯的降低。

以上兩種模型的優化雖然會下降模型的預測精度,可是在算力不夠、內存不大、電量不足的移動設備和物聯網設備來講這些精度損失帶來的收益仍是很可觀的。

最後tensorflow lite 還有micro版,能夠在條件更苛刻的MCU設備上運行,這類設備沒有完整的操做系統,只有kb級的ram和flash,可能只是由普通的鈕釦電池供電。

關於tf.distribute

tf.distribute.Strategy是tensorflow的分佈式計算API,使得tensorflow能夠分佈式的運算。

而這裏的分佈式和通常意義上的分佈式不一樣,對於tensorflow來講,不只僅是多臺機器纔算是分佈式,多個cpu、gpu都是分佈式。

而經過tf.distribute.Strategy只須要修改幾行代碼就能夠實現模型在各類環境下的分佈式運算。

可是不論是多機器仍是多cpu、多gpu的運算大體的思路都是同樣的:

1.將模型鏡像加載到各個分片中

2.各自分配一些數據進行梯度運算

3.使用all-reduce算法回收梯度運算結果進行合併

4.將合併後的梯度廣播到各個分片中

5.再從第2步開始循環

關於tensorflow js

tensorflow js使得模型在只要有js環境下就可以運行。

然而目前絕大多數的js場景都是web端,這就使得對於tensorflow js平臺上的運行的模型對大小的限制變得很是苛刻,特別是在微信端就直接要求用戶文件不能超過2MB,其中包括用戶程序和tf模型。

可是將模型佈署在web端運行的優點仍是不少的,好比最直接的就是保護用戶隱私,運算過程不須要將用戶數據上傳到服務器,這樣同時也減小了網絡傳輸的流量和下降了服務佈署的成本,在下降延遲的同時也直接提高了用戶體驗。

對此,對於開發者的要求也是很是高的,須要在儘可能小的模型里加上更多的功能,同時也要在有限的算力上儘可能的下降延遲。

關於tensorflow extended(TFX)

以前講到tensorflow2.0支持了愈來愈多的平臺,這就使得開發佈署的複雜度提高了不少,而tensorflow extended就是解決這一系列問題的一套解決方案。

這套解決方案一共分爲四個模塊

1.tensorflow data validation:幫助開發者整理和驗證訓練數據

2.tensorflow transform:將數據轉換爲tensorflow在運算過程當中合適的格式

3.tensorflow model analysis:評估模型,與以前的模型性能及預測結果進行比較

4.tensorflow serving:發佈及版本控制

相關文章
相關標籤/搜索