機器學習幫你預測電池壽命:精確了解電池還能充幾次
電池壽命的確定,是移動硬件發展的重要一環,但是由于電池電化學反應的不確定性以及不同的使用環境和習慣,電池壽命變成了一門玄學。
不過柏林的三位小伙伴,利用Tensorflow,在原有的預測體系基礎上。更近一步,完成了電池的全壽命預測。
捋清數據
研究者在原始模型中,統計了124塊鋰電池的充放電循環次數中的數據作為壽命指標。
簡單來說,從完全充滿電到完全放光電是一個循環,當循環的次數多到鋰電池只能容納以前電量的80%時,電池壽終正寢。
研究中統計的電池循環次數從150到2300,差異巨大。
但是這個過程中的數據不僅只是記數,過程中輸入的連貫充電循環可以作為窗口,每個窗口有一個“當前循環數”和“剩余循環次數”。除此之外,每個窗口有一個目標值,這個目標值以最后循環的特征值為準。
在每個電池循環周期中,電池的電壓,電流,溫度,電荷的動態變化也需要統計。并且還會出現像內阻,電荷量,通電時間等定量數據。
之前說過,入選研究的電池,通電循環的次數各不相同。
有的循環多,有的循環少,那跟時間變化相關的數據就不好統一。畢竟循環了幾千次電池的電流,不能跟剛用兩三次就超齡報廢的電池電流做對比。
針對這個問題,研究者首先以放電時電池的電壓變化范圍代替時間作為變化量的參考基準。
因為電池的電壓范圍都是一樣的,這就有了同步的參考范圍。之后插補隨電壓變化的電荷量和溫度值,最后給以電壓為基準,劃分量程,就能進行完整的數據參照了。
構建模型
雖然數據詳細清晰,但是數組和標量數據顯然不能簡單塞進一個模型里。
研究者利用Keras functional API作為構建模型的工具,對數組數據和標量數據分開導入。
對于數組數據,他們將其與窗口的特征數據,例如窗口大小,長度,特征值數量相結合,形成三維矩陣。
之后在保證窗口的連續性基礎上,利用Maxpooling處理,將矩陣分為三個Conv2D函數圖層。
通過這個方式便可以提取出有相關性的信息,之后再把上述數據降維成一維數組。在數據都享有同一個變化范圍,并且高度相關的前提下。
Conv2D扮演的角色,就像圖片中代表顏色通道的數字一樣,代表著數據的特征。
標量數據的導入流程也與之類似,不過只需要從二維降到一維就可以了。
經過處理后的兩個具有特征映射的平面數組,就像處理好的食材一樣,可以放心的做出模型需要的密集網絡這盤大菜了。
訓練優化
萬事俱備,就差練手。
研究者撰寫了一個指令集操作界面,從而方便進行訓練的相關操作。
- ./train.sh
如果需要調整訓練的epoch和窗口中樣本的數量,只需要輸入這個指令:
- ./train.sh -e 70 -w 10
將訓練值和驗證值的數據趨勢對比可以看出,在平均絕對偏差方面,二者的差距在逐步縮小,曲線走勢也在逐步接近。
為了縮小模型與驗證值的差距,研究者選擇加入Dropout工具進行進一步的擬合。
除此之外,研究者還需要對模型進行超參數調優,因此研究者對不同設置采用了網格搜索。
那么如何跟蹤這些設置呢?這時候Tenserflow2.0的hparams module派上了用場。
經過這一系列操作之后,研究者就可以比較出擬合過程中最關鍵的參數了。
由于準確預測結果要求“當前循環”和“剩余循環數”都要大于零。研究者使用了ReLU作為輸出層的啟動機制,這可以降低訓練過程中模型的搜索范圍,節約時間。
由于研究者的模型依賴CNN,所以他們嘗試了不同的核心大小,最后在兩種不同的學習速率前提下比較了不同設置下當前循環和剩余循環的MAE值。
△誤差值對比
△當前循環的MAE值對比

△剩余循環的MAE值對比
經過超參數調優后的最佳配置模型,在訓練epoch上千的基礎上,當前循環MAE為90.剩余循環MAE為115。雖說不算完美,不過對于研究者的應用方面預期來說,這個結果很不錯。
預測上線
實際上曲線上可以看出。模型預測差距最小的位置,并不是訓練終點,而是訓練大概四分之三的時候。所以在研究者在這個分界點加入了檢查點,從而重置模型來避免多次訓練帶來的偏差。
模型已經大功告成了,現在就可以嘗試把結果轉換成曲線,之后就可以上線應用了。
目前包括當前循環和剩余循環的輸出曲線大概是這樣的。
雖說對電池來說這有點“大限將至”的味道,但是對于用戶而言,這確實是一個不錯的進步。
現實的電池壽命預測,只是在原有電池容量的基礎上對電池容量的變化進行大致參考。這樣的評估模式,并沒有考慮到不同的使用環境以及用戶的使用習慣。
因為從低溫到高溫使用環境,從24小時插充電線到三天不開屏幕鎖,電池的循環次數必然會產生差異,這還沒有考慮不同批次電池的制造差異。因此這種模糊的估測并不能準確的表達電池的真正壽命。
而這個電池壽命預測模型,隨著不同環境下電池壽命相關數據的豐富,可以為用戶提供一個更為精準的使用參考。
至少它能提醒你,啥時候該換手機了。