機器學習與傳統軟體開發的衝突與融合 - alepiad
在過去的幾年裡,我一直在用機器學習和資料科學的想法來顛覆傳統的軟體公司,這些想法直接來自我團隊的核心研究。我發現大多數問題來自三個關鍵領域。
大部分障礙可以歸為以下三類之一:
- 語言
- 開發過程
- 預期結果
統一語言
學術界和工業界之間的大多數衝突是由於語言障礙造成的:
- 我們談論實驗、模型和假設。他們談論功能、業務規則和使用者體驗。
- 我們根據我們擁有的資料、我們可以提取的特徵以及我們可以訓練的模型來定義一個問題;他們根據使用者故事和功能來定義它。
這不僅僅是使用不同的行話的問題。
我們談論我們想要解決的問題的方式與行業談論同一問題的方式完全不同。
減少這種阻抗需要找到一種共同語言:
我們需要學習的是,產品是為使用者製造的,一個沒有人關心的預測的模型是沒有用的。
我們發現,有助於建立這種共同語言的一個方法是混合團隊,來自雙方的人在同一個程式碼庫中一起工作,並且每天互相交流。
但這說起來容易做起來難。
大多數人,無論是在學術界還是在業界,都不願意離開他們的舒適區。
這些都是專業人士,他們非常擅長做他們的工作,他們不想在被迫做或談論他們沒有受過訓練的事情時感到愚蠢。
作為一個團隊或專案的領導者,你的工作是創造一個環境,讓每個人都感到安全,承認他們不知道的東西,並且他們可以互相學習。
這可能是你最重要,也是最難的任務。
開發過程
開發過程是另一個痛點,因為研究和軟體生產之間的目標存在著根本性的差異。
我們想測試假設;而他們工業界想交付功能:
- 我們的反饋環路很長,也很複雜:我們必須建立一個資料處理管道,和一個交叉驗證環路,然後我們繼續對我們的模型進行HPO。
我們的成功指標通常是以一個模型和一個測試資料集來定義的,不需要外部驗證。此外,它們往往是定量的和客觀的。 - 軟體行業有一個更緊密的反饋迴路,關鍵是,它往往涉及到交付一個新功能,並檢視使用者如何與之互動。
而評估往往比簡單的損失指標更有質量和細微差別。
這就產生了一個緊張點,研究人員不斷要求有更多的時間來調整他們的模型和提高效能,而工業界則不斷要求有更多的功能,而這些功能昨天就應該開始工作了。
我們發現,一個好的策略是在非常短的端到端週期內工作,從資料收集到模型部署。
從最簡單的基線開始,儘快將其部署到生產中。然後進行評估和迭代。
不過這說起來容易做起來難。如果你沒有一個好的MLOps管道,僅僅將一個簡單的基線投入生產就需要幾個星期。
所以,在最初的幾個迭代中,要投資於讓管道變得更順暢。
你需要能夠從測試一個新的模型(或調整一些超引數)並與當前部署的模型進行比較,到在短時間內將其序列化並部署在生產中,最好是在CI/CD管道中。
一旦你有了基本的管道,然後專注於建模、特徵工程、超引數調整。
預測結果
最後,痛苦的另一個關鍵來源是對效果不切實際的期望。
在傳統軟體中,每一個錯誤都是由於程式設計錯誤造成的。但在機器學習中,錯誤只是解決方案的一個基本部分。
當業界看到一個錯誤的分類時,他們自然認為你的方法是錯誤的。
你必須說服他們,有一個最低的、非零的、不可減少的錯誤率,他們必須接受並忍受。
我們發現,有助於解決這個問題的方法是用機會成本而不是錯誤率來衡量。
你每次犯錯會花費多少錢,而有了這個額外的ML-powered功能,你會賺多少錢?這值得嗎?
在這種情況下,是行業必須控制其期望值,而你作為專案負責人的工作就是要傳達這種心態。
對預期要誠實。不要過度承諾。
總結
根據我的經驗,與行業合作,特別是與剛剛開始部署機器學習解決方案的公司合作,對雙方來說都是一個巨大的機會,只要雙方願意相互學習。
相關文章
- 融合與衝突:當電子遊戲遇到大眾傳媒遊戲
- 思泉軟體開發平臺與傳統軟體開發的優勢
- 網路軟體與桌面軟體的融合
- 郵件開發:Tomcat中JavaMail支援與衝突TomcatJavaAI
- 軟體開發與軟體研發
- 專訪IBM Linux總監:開源與商業軟體不衝突(轉)IBMLinux
- 傳統ESB與SOA架構融合架構
- DevOps與傳統的融合落地實踐dev
- 淺談《刺客信條》的敘事:刺客和聖殿騎士的衝突與融合
- google EventBus與spring注入的衝突GoSpring
- 軟體開發與反饋控制系統 (轉)
- BE Remote Agent與Oracle EM埠衝突REMOracle
- 團軟體的設計與開發
- 硬體或軟體衝突導致當機
- 使用SUI與JQuery衝突的解決方法UIjQuery
- Github Fork倉庫的衝突與同步管理Github
- 【大型軟體開發】淺談大型Qt軟體開發(四)動態連結庫的宏衝突問題、COM元件開發的常見問題QT元件
- 超融合架構與傳統IT架構的區別架構
- underscore 系列之防衝突與 Utility FunctionsFunction
- statistics_level與SGA_TARGET衝突
- javamelody與swagger註解衝突JavaSwagger
- UITapGestureRecognizer與didSelectRowAtIndexPath衝突解決UIIndex
- iOS 開發中遇到的手勢衝突iOS
- 思考軟體開發中的快與慢
- 【大型軟體開發】開發日誌(五).net框架與C++的融合:CLR——C++呼叫C#的DLL框架C++C#
- 如何解決 touchstart 事件與 click 事件的衝突事件
- OGG複製與加密欄位的衝突加密
- jQuey與json.jar的衝突問題JSONJAR
- Xflow軟體與傳統CFD軟體比較有哪些優勢
- Anno微服務引擎與傳統應用相融合微服務
- Delphi:傳統與現代交織的開發利器
- ScrollView 與ListView 滑動衝突解決View
- perl-Time-HiRes安裝與perl衝突
- [軟體人生]搶錢的電影與現在的軟體開發
- 軟體定製開發與SaaS的區別
- 軟體開發人員的組織與分工
- PtrClassicFrameLayout與viewpager橫向滑動衝突的問題Viewpager
- 如解決jquery與原生js衝突的問題jQueryJS