前端与人工智能
文/Yoha 來自螞蟻金服人工智能部 郵箱: yaohua.cyh@antfin.com
好吧,我承認這個標題有點太大了,其實我更想要說的是“在人工智能時代、在人工智能公司、在人工智能部門,我們前端er的角色到底是怎樣的”。
眾(ge)所(ren)周(yi)知(yin),現(xiàn)在或者說未來的的前端發(fā)展有這么幾個方向,前端 Node.js、前端 各種端(包括IOT)、前端 數(shù)據(jù)可視化、前端 圖形。等等,話說為啥前端后面為啥會有這么多加號呢?我的理解是,前端的職能在發(fā)生改變,從之前單純的頁面仔逐漸地往業(yè)務里面深入。當然這篇文章不是發(fā)表對這些方向的個人看法,我想說的是,前端 AI或許也會是未來的一個發(fā)展方向(利益相關,畢竟我是在AI部門嘛,哈哈哈)。
這幾年算法火啊,學算法的人越來越多啦,當然這也說明企業(yè)內部對算法人才的需求量大。但是,算法和工程是分不開的,沒有工程,算法也是無用武之地。好,既然有工程,那么肯定少不了我們前端嘛,那么我們前端到底能做些什么呢?我先給出幾個結論,后面再逐個說明:
當然以上的并不包括所有方面,大家有補充的也歡迎一起討論~
開發(fā)公司官網(wǎng)
喂!那誰!你別笑!開發(fā)公司官網(wǎng)怎么了?AI公司的官網(wǎng)還真的就和其他公司的不一樣!除去輪播圖、全屏翻頁、html5動畫這種高端技能,你不做點其他的好意思叫AI官網(wǎng)?你可以整點AI人臉識別吧?可以整點攝像頭手勢控制吧?好,那么這種簡單模型就可以放到前端來跑。你說咋跑?嗯。。。這里不做介紹,畢竟不是教程文嘛。有興趣的同學可以找我私聊交流。
工程平臺的開發(fā)
工程平臺包含的比較廣了,事實上所有的AI應用平臺都是工程平臺,而從事AI應用前端一般屬于中臺型前端。至于有哪些工程平臺呢?舉些?:比如數(shù)據(jù)的入口,有數(shù)據(jù)標注平臺;建模有建模平臺;模型的部署有模型服務平臺等等一系列圍繞著AI來建設的大型平臺。而且這些平臺在工程上對也對前端帶來了極大的挑戰(zhàn)。動輒幾萬~數(shù)十萬的代碼量、各種稀奇古怪的交互操作、各種大數(shù)據(jù)的可視化、各種富媒體的可視化等等等。但這些都不是關鍵!!what?!這不是關鍵?那什么是關鍵?我理解的是,關鍵是在建設這些中臺應用的過程中對你的各方面能力的提升,不僅會促進你前端技術提升,而且還會大大開闊你的視野、對跨領域技術的理解、對公司業(yè)務的理解等等。這也是中臺型前端和業(yè)務前端及工程前端最大的不同之處。
模型可視化
模型可視化這一塊說實話,不屬于前端的范疇,同時也不完全屬于算法范疇或數(shù)據(jù)可視化范疇,嚴格的來說屬于前端、數(shù)據(jù)可視化和算法的交叉范疇。那么模型可視化到底是什么呢?
我這樣來強行解釋一下吧,大家都知道深度學習一直是一個黑盒子,從事深度學習的同學親切地稱呼自己為“調參工程師”,為啥呢?因為大家只知道這個神經(jīng)網(wǎng)絡輸入數(shù)據(jù)后經(jīng)過一系列計算能得到自己想要的結果,而卻不知道為啥會得到這個結果。這個用神經(jīng)網(wǎng)絡訓練出來的模型到底經(jīng)歷了什么?或者說這個訓練出來的模型為啥不準確?怎樣去調節(jié)訓練參數(shù),從而得到更好的模型?目前還得不到準確的解答。所以,模型可視化就是通過可視化的手段去解釋模型,去跟蹤訓練過程。所以就需要開發(fā)er對算法、對可視化、對前端都要理解,通過各種可視化手段去剖析模型,幫助算法同學更好地去調參去理解模型。tensorflow配套的tensorboard就是一套可視化分析工具,但是還遠遠不夠。
那么模型可視化方向對前端又有什么要求呢?
前端技術上d3.js、canvas至少得熟練吧?常見的高維數(shù)據(jù)降維方法總得會幾個吧?pca、t-sne、自動編碼器總得聽說過吧?cnn、rnn、dnn這些算法的原理總得熟悉吧?說到這里大家應該也能看到,模型可視化需要的就是這樣復合型人才。現(xiàn)在也有很多同學在往這個方向走。
算法開發(fā)
相信大家之前應該也看到過tensorflow.js、deeplearning.js或者kera.js的科普文,之前阿里南京的一位同事做的用tensorflow.js來調教chrome里的小恐龍做的也很不錯。那么,前端做算法能落實到生產(chǎn)環(huán)境嗎?!能真正地給業(yè)務帶來價值嗎?答案是:可以!首先先說一下前端目前可以進行高性能計算的三種方法(不了解的同學自行搜索哈):
所以,opencv就有了asm.js和WebAssembly版本的,我們可以在前端做cv算法。什么物體跟蹤、圖像處理、特征檢測等等等,在前端做ok的,并且我們也落地到了生產(chǎn)環(huán)境中。
等等,還有gpu呢?說到gpu,當然要用到我們的tensorflow.js了。那么tensorflow.js在生產(chǎn)環(huán)境中能做些什么呢?一般的tensorflow模型動輒幾百兆,在前端怎么跑呢?沒關系,我們有MobileNet啊,MobileNet是針對于移動端模型提出的神經(jīng)網(wǎng)絡架構,能極大地減少模型參數(shù)量,同理也能用到瀏覽器端上。那么現(xiàn)階段能做些什么呢?舉幾個?:
還有比如作者最近移植的基于tensorflow.js Node的tvnet算法,可以提取視頻中的稠密光流。而且隨著模型壓縮技術的發(fā)展,相信未來會有更多的模型能跑在前端上。
奉上一段我之前用來預測比特幣漲跌的算法模型,基于GRU的,僅供娛樂哈:
const input = tf.input({shape: [timeStep, 9]});const inputReverse = tf.input({shape: [timeStep, 9]});const gruFwd = tf.layers.gru({units: 24,unitForgetBias: true});const gruBwd = tf.layers.gru({units: 24,unitForgetBias: true});const fwd = gruFwd.apply(input);const bwd = gruBwd.apply(inputReverse);const lstmOpt = tf.layers.activation({ activation: "relu" }).apply(tf.layers.add().apply([fwd, bwd]));let dense = tf.layers.dense({units: 24,activation: "relu"}).apply(lstmOpt);const outputs = tf.layers.dense({units: 2,activation: "softmax"}).apply(dense);model = tf.model({ inputs: [input, inputReverse], outputs: outputs });console.log("training...");let res;model.compile({loss: "categoricalCrossentropy",optimizer: "adam"});train_data = tf.tensor3d(train_data);train_label = tf.tensor2d(train_label);train_data_reverse = tf.tensor3d(train_data_reverse);res = await model.fit([train_data, train_data_reverse], train_label, {epochs: 100});綜上所述,我相信未來前端在AI方向上會大有可為!AI makes life better.FE makes AI better.
最后
哎呀,寫了這么多,怎能不來個硬廣:螞蟻金服人工智能部招前端啦!多多益善,歡迎各路英雄加入,讓我們一起來探索前端 AI的未來! 郵箱見文章開頭。
總結
- 上一篇: AMBA3.0协议——AXI(Advan
- 下一篇: console js刷新页面_浏览器co