1. 增量學(xué)習(xí)的概念
1.1 什么是增量學(xué)習(xí)
人類有終身不斷獲取、調(diào)整和轉(zhuǎn)移知識的能力,雖然在我們的一生中,我們確實傾向于逐漸忘記之前學(xué)習(xí)過的知識,但只有在極少的情況下,對新知識的學(xué)習(xí)會災(zāi)難性地影響已經(jīng)學(xué)到的知識,這樣的學(xué)習(xí)能力被稱為增量學(xué)習(xí)的能力。
具體來講,「增量學(xué)習(xí)的能力就是能夠不斷地處理現(xiàn)實世界中連續(xù)的信息流,在吸收新知識的同時保留甚至整合、優(yōu)化舊知識的能力?!?/p>
增量學(xué)習(xí)(Incremental Learning)已經(jīng)有20多年的研究歷史,但增量學(xué)習(xí)更多地起源于認(rèn)知神經(jīng)科學(xué)對記憶和遺忘機制的研究,因此不少論文的idea都啟發(fā)于認(rèn)知科學(xué)的發(fā)展成果,本文不會探討增量學(xué)習(xí)的生物啟發(fā),關(guān)于面向生物學(xué)和認(rèn)知科學(xué)的增量學(xué)習(xí)綜述可見 Continual lifelong learning with neural networks: A review[1]。
1.2 為什么要增量學(xué)習(xí)
在機器學(xué)習(xí)領(lǐng)域,增量學(xué)習(xí)致力于解決模型訓(xùn)練的一個普遍缺陷:「災(zāi)難性遺忘(catastrophic forgetting)」,也就是說,一般的機器學(xué)習(xí)模型(尤其是基于反向傳播的深度學(xué)習(xí)方法)在新任務(wù)上訓(xùn)練時,在舊任務(wù)上的表現(xiàn)通常會顯著下降。
造成災(zāi)難性遺忘的一個主要原因是「傳統(tǒng)模型假設(shè)數(shù)據(jù)分布是固定或平穩(wěn)的,訓(xùn)練樣本是獨立同分布的」,所以模型可以一遍又一遍地看到所有任務(wù)相同的數(shù)據(jù),但當(dāng)數(shù)據(jù)變?yōu)檫B續(xù)的數(shù)據(jù)流時,訓(xùn)練數(shù)據(jù)的分布就是非平穩(wěn)的,模型從非平穩(wěn)的數(shù)據(jù)分布中持續(xù)不斷地獲取知識時,新知識會干擾舊知識,從而導(dǎo)致模型性能的快速下降,甚至完全覆蓋或遺忘以前學(xué)習(xí)到的舊知識。
為了克服災(zāi)難性遺忘,我們希望模型一方面必須表現(xiàn)出從新數(shù)據(jù)中整合新知識和提煉已有知識的能力(可塑性),另一方面又必須防止新輸入對已有知識的顯著干擾(穩(wěn)定性)。這兩個互相沖突的需求構(gòu)成了所謂的「穩(wěn)定性-可塑性困境(stability-plasticity dilemma)」。
解決災(zāi)難性遺忘最簡單粗暴的方案就是使用所有已知的數(shù)據(jù)重新訓(xùn)練網(wǎng)絡(luò)參數(shù),以適應(yīng)數(shù)據(jù)分布隨時間的變化。盡管從頭訓(xùn)練模型的確完全解決了災(zāi)難性遺忘問題,但這種方法效率非常低,極大地阻礙了模型實時地學(xué)習(xí)新數(shù)據(jù)。而增量學(xué)習(xí)的主要目標(biāo)就是在計算和存儲資源有限的條件下,在穩(wěn)定性-可塑性困境中尋找效用最大的平衡點。
1.3 增量學(xué)習(xí)的特點
增量學(xué)習(xí)和持續(xù)學(xué)習(xí)(Continual Learning)、終身學(xué)習(xí)(Lifelong Learning)的概念大致是等價的,它們都是在連續(xù)的數(shù)據(jù)流中訓(xùn)練模型,隨著時間的推移,更多的數(shù)據(jù)逐漸可用,同時舊數(shù)據(jù)可能由于存儲限制或隱私保護等原因而逐漸不可用,并且學(xué)習(xí)任務(wù)的類型和數(shù)量沒有預(yù)定義(例如分類任務(wù)中的類別數(shù))。
但增量學(xué)習(xí)目前還沒有一個特別清晰的定義,因此比較容易與在線學(xué)習(xí),遷移學(xué)習(xí)和多任務(wù)學(xué)習(xí)等概念混淆,「尤其要注意增量學(xué)習(xí)和在線學(xué)習(xí)的區(qū)別,在線學(xué)習(xí)通常要求每個樣本只能使用一次,且數(shù)據(jù)全都來自于同一個任務(wù),而增量學(xué)習(xí)是多任務(wù)的,但它允許在進入下一個任務(wù)之前多次處理當(dāng)前任務(wù)的數(shù)據(jù)」。上圖表現(xiàn)了增量學(xué)習(xí)和其他學(xué)習(xí)范式的區(qū)別,一般來說,增量學(xué)習(xí)有如下幾個特點:
學(xué)習(xí)新知識的同時能夠保留以前學(xué)習(xí)到的大部分知識,也就是模型在舊任務(wù)和新任務(wù)上均能表現(xiàn)良好。
計算能力與內(nèi)存應(yīng)該隨著類別數(shù)的增加固定或者緩慢增長,最理想的情況是一旦完成某一任務(wù)的學(xué)習(xí),該任務(wù)的觀測樣本便被全部丟棄。
模型可以從新任務(wù)和新數(shù)據(jù)中持續(xù)學(xué)習(xí)新知識,當(dāng)新任務(wù)在不同時間出現(xiàn),它都是可訓(xùn)練的。
由于增量學(xué)習(xí)問題的復(fù)雜性和挑戰(zhàn)的多樣性,人們通常只討論特定設(shè)置下的增量學(xué)習(xí)。以一個圖像分類模型為例,我們希望模型具有增量學(xué)習(xí)新的圖像和新的類別的能力,但前者更多地與遷移學(xué)習(xí)有關(guān),因此任務(wù)增量學(xué)習(xí)(Task-incremental Learning)和難度更高一點的類增量學(xué)習(xí)(Class-incremental Learning)是深度學(xué)習(xí)社區(qū)當(dāng)前主要考慮的增量學(xué)習(xí)范式。
「本文主要討論近幾年關(guān)注度最高的類增量學(xué)習(xí)范式」,更廣泛更詳細(xì)的增量學(xué)習(xí)介紹可參考專著《Lifelong Machine Learning》[2]。
2. 增量學(xué)習(xí)的實現(xiàn)方式
增量學(xué)習(xí)是一個連續(xù)不斷的學(xué)習(xí)過程,在這個過程中,我們假設(shè)模型已經(jīng)學(xué)習(xí)了前 個任務(wù):,當(dāng)面對任務(wù) 和對應(yīng)的數(shù)據(jù) 時,我們希望可以利用從舊任務(wù)中學(xué)習(xí)到的先驗知識幫助 的學(xué)習(xí),然后更新模型所學(xué)習(xí)到的知識。這個過程要求我們在當(dāng)前任務(wù) 中尋找參數(shù) 最小化下面的損失函數(shù):
其中舊數(shù)據(jù) 是部分可見或完全不可見的。
增量學(xué)習(xí)方法的種類有很多種劃分方式,本文將其劃分為以下三種范式:
正則化(regularization)
回放(replay)
參數(shù)隔離(parameter isolation)
其中基于正則化和回放的增量學(xué)習(xí)范式受到的關(guān)注更多,也更接近增量學(xué)習(xí)的真實目標(biāo),參數(shù)隔離范式需要引入較多的參數(shù)和計算量,因此通常只能用于較簡單的任務(wù)增量學(xué)習(xí)。關(guān)于其他劃分方式和不同類別的增量學(xué)習(xí)的優(yōu)缺點對比可見A Comprehensive Study of Class Incremental Learning Algorithms for Visual Tasks[3],下面僅介紹基于正則化和回放的增量學(xué)習(xí)的經(jīng)典方法以及相關(guān)進展。
2.1 基于正則化的增量學(xué)習(xí)
基于正則化的增量學(xué)習(xí)的主要思想是「通過給新任務(wù)的損失函數(shù)施加約束的方法來保護舊知識不被新知識覆蓋」,這類方法通常不需要用舊數(shù)據(jù)來讓模型復(fù)習(xí)已學(xué)習(xí)的任務(wù),因此是最優(yōu)雅的一類增量學(xué)習(xí)方法。Learning without Forgetting (ECCV 2016)[4]提出的LwF算法是基于深度學(xué)習(xí)的增量學(xué)習(xí)的里程碑之作,在介紹LwF算法之前,我們先了解一些最簡單的增量學(xué)習(xí)方法。
上圖展示了一個具有多頭網(wǎng)絡(luò)結(jié)構(gòu)的模型學(xué)習(xí)新任務(wù)的不同策略,其中(a)為已經(jīng)訓(xùn)練好的基于CNN的原始模型, 表示不同任務(wù)共享的CNN參數(shù), 表示與原始任務(wù)相關(guān)的MLP參數(shù),當(dāng)加入一個新的分類任務(wù)時,我們可以增加一個隨機初始化的MLP參數(shù) ?;?來學(xué)習(xí) 的方法包括如下幾類:
微調(diào)(Fine-tuning):微調(diào)沒有舊任務(wù)參數(shù)和樣本的指導(dǎo),因此模型在舊任務(wù)上的表現(xiàn)幾乎一定會變差,也就是發(fā)生災(zāi)難性遺忘。
聯(lián)合訓(xùn)練(Joint Training):聯(lián)合訓(xùn)練相當(dāng)于在所有已知數(shù)據(jù)上重新訓(xùn)練模型,效果最好,因此通常被認(rèn)為是「增量學(xué)習(xí)的性能上界」,但訓(xùn)練成本太高。
特征抽取(Feature Extraction):特征抽取只訓(xùn)練 ,共享參數(shù) 沒有得到更新,雖然不影響模型在舊任務(wù)上的表現(xiàn),但不能有效捕獲新任務(wù)獨有的特征表示,在新任務(wù)上的表現(xiàn)通常不如人意。
LwF算法是介于聯(lián)合訓(xùn)練和微調(diào)訓(xùn)練之間的訓(xùn)練方式,LwF的特點是它不需要使用舊任務(wù)的數(shù)據(jù)也能夠更新 。LwF算法的主要思想來自于knowledge distillation[5],也就是使新模型在新任務(wù)上的預(yù)測和舊模型在新任務(wù)上的預(yù)測相近。
具體來說,LwF算法先得到舊模型在新任務(wù)上的預(yù)測值,在損失函數(shù)中引入新模型輸出的蒸餾損失,然后用微調(diào)的方法在新任務(wù)上訓(xùn)練模型,從而避免新任務(wù)的訓(xùn)練過分調(diào)整舊模型的參數(shù)而導(dǎo)致新模型在舊任務(wù)上性能的下降。算法流程如下圖所示,其中 用于權(quán)衡模型的穩(wěn)定性和可塑性。
但是,這種方法的缺點是高度依賴于新舊任務(wù)之間的相關(guān)性,當(dāng)任務(wù)差異太大時會出現(xiàn)任務(wù)混淆的現(xiàn)象(inter-task confusion),并且一個任務(wù)的訓(xùn)練時間會隨著學(xué)習(xí)任務(wù)的數(shù)量線性增長,同時引入的正則項常常不能有效地約束模型在新任務(wù)上的優(yōu)化過程。
不少研究者圍繞著LwF算法的思想提出了很多改進策略,比較有名的包括Encoder Based Lifelong Learning (ICCV 2017)[6]提出的基于低維特征映射的EBLL算法,以及Overcoming catastrophic forgetting in neural networks (PNAS 2017)[7]提出的基于貝葉斯框架的EWC算法,EWC算法實際上對應(yīng)了一個通用的「參數(shù)約束」方法,它引入了一個額外的和參數(shù)有關(guān)的正則損失:
該損失會根據(jù)不同參數(shù)的重要性來鼓勵新任務(wù)訓(xùn)練得到的新模型參數(shù)盡量靠近舊模型參數(shù)。后續(xù)對EWC作出改進了論文也很多,比如Rotate your Networks: Better Weight Consolidation and Less Catastrophic Forgetting (ICPR 2018)[8]。
概括起來,基于正則化的增量學(xué)習(xí)方法通過引入額外損失的方式來修正梯度,保護模型學(xué)習(xí)到的舊知識,提供了一種緩解特定條件下的災(zāi)難性遺忘的方法。不過,雖然目前的深度學(xué)習(xí)模型都是過參數(shù)化的,但模型容量終究是有限的,我們通常還是需要在舊任務(wù)和新任務(wù)的性能表現(xiàn)上作出權(quán)衡。近幾年,不少研究者也提出了各種類型的正則化手段,有興趣的話可以參考下面的論文:
Learning without Memorizing (CVPR 2019)[9]
Learning a Unified Classifier Incrementally via Rebalancing (CVPR 2019)[10]
Class-incremental Learning via Deep Model Consolidation (WACV 2020)[11]
2.2 基于回放的增量學(xué)習(xí)
從字面意思上來看,基于回放的增量學(xué)習(xí)的基本思想就是"溫故而知新",在訓(xùn)練新任務(wù)時,一部分具有代表性的舊數(shù)據(jù)會被保留并用于模型復(fù)習(xí)曾經(jīng)學(xué)到的舊知識,因此「要保留舊任務(wù)的哪部分?jǐn)?shù)據(jù),以及如何利用舊數(shù)據(jù)與新數(shù)據(jù)一起訓(xùn)練模型」,就是這類方法需要考慮的主要問題。
iCaRL: Incremental Classifier and Representation Learning (CVPR 2017)[12]是最經(jīng)典的基于回放的增量學(xué)習(xí)模型,iCaRL的思想實際上和LwF比較相似,它同樣引入了蒸餾損失來更新模型參數(shù),但又放松了完全不能使用舊數(shù)據(jù)的限制,下面是iCaRL設(shè)計的損失函數(shù):
LwF在訓(xùn)練新數(shù)據(jù)時完全沒用到舊數(shù)據(jù),而iCaRL在訓(xùn)練新數(shù)據(jù)時為每個舊任務(wù)保留了一部分有代表性的舊數(shù)據(jù)(iCaRL假設(shè)越靠近類別特征均值的樣本越有代表性),因此iCaRL能夠更好地記憶模型在舊任務(wù)上學(xué)習(xí)到的數(shù)據(jù)特征。
另外Experience Replay for Continual Learning (NIPS 2019)[13]指出這類模型可以動態(tài)調(diào)整舊數(shù)據(jù)的保留數(shù)量,從而避免了LwF算法隨著任務(wù)數(shù)量的增大,計算成本線性增長的缺點?;趇CaRL算法的一些有影響力的改進算法包括End-to-End Incremental Learning (ECCV 2018)[14]和Large Scale Incremental Learning (CVPR 2019)[15],這些模型的損失函數(shù)均借鑒了知識蒸餾技術(shù),從不同的角度來緩解災(zāi)難性遺忘問題,不過災(zāi)難性遺忘的問題還遠沒有被滿意地解決。
iCaRL的增量學(xué)習(xí)方法會更新舊任務(wù)的參數(shù) ,因此很可能會導(dǎo)致模型對保留下來的舊數(shù)據(jù)產(chǎn)生過擬合,Gradient Episodic Memory for Continual Learning (NIPS 2017)[16]針對該問題提出了梯度片段記憶算法(GEM),GEM只更新新任務(wù)的參數(shù)而不干擾舊任務(wù)的參數(shù),GEM以不等式約束的方式修正新任務(wù)的梯度更新方向,從而希望模型在不增大舊任務(wù)的損失的同時盡量最小化新任務(wù)的損失值。
GEM方向的后續(xù)改進還有Efficient Lifelong Learning with A-GEM (ICLR 2019)[17]和Gradient based sample selection for online continual learning (NIPS 2019)[18]。
另外,也有一些工作將VAE和GAN的思想引入了增量學(xué)習(xí),比如Variational Continual Learning (ICLR 2018)[19]指出了增量學(xué)習(xí)的貝葉斯性質(zhì),將在線變分推理和蒙特卡洛采樣引入了增量學(xué)習(xí),Continual Learning with Deep Generative Replay (NIPS 2017)[20]通過訓(xùn)練GAN來生成舊數(shù)據(jù),從而避免了基于回放的方法潛在的數(shù)據(jù)隱私問題,這本質(zhì)上相當(dāng)于用額外的參數(shù)間接存儲舊數(shù)據(jù),但是生成模型本身還沒達到很高的水平,這類方法的效果也不盡人意。
總體來說,基于回放的增量學(xué)習(xí)的主要缺點是需要額外的計算資源和存儲空間用于回憶舊知識,當(dāng)任務(wù)種類不斷增多時,要么訓(xùn)練成本會變高,要么代表樣本的代表性會減弱,同時在實際生產(chǎn)環(huán)境中,這種方法還可能存在「數(shù)據(jù)隱私泄露」的問題。
3. 增量學(xué)習(xí)的應(yīng)用
增量學(xué)習(xí)的優(yōu)點是可以隨時訓(xùn)練新數(shù)據(jù),不需要保留大量訓(xùn)練數(shù)據(jù),因此存儲和計算開銷都比較小,同時還能夠有效避免用戶的隱私泄露問題,這在「移動邊緣計算的場景」下是非常有價值有意義的?!傅壳暗脑隽繉W(xué)習(xí)依舊是一個很開放的研究問題,很大程度上還處于理論探索階段,在很多方面學(xué)界都沒有達成統(tǒng)一的共識,不少論文給出的結(jié)論常常會相互沖突,因此增量學(xué)習(xí)還沒有在細(xì)分領(lǐng)域中得到大規(guī)模的應(yīng)用和落地。」
3.1 計算機視覺
大部分增量學(xué)習(xí)研究都是面向圖像分類任務(wù)的,近幾年也有不少論文將增強學(xué)習(xí)推廣到了更復(fù)雜目標(biāo)檢測和語義分割任務(wù)上,下面列舉了一些有代表性的工作。
圖像分類
A comprehensive, application-oriented study of catastrophic forgetting in DNNs (ICLR 2019)[21]
A Comprehensive Study of Class Incremental Learning Algorithms for Visual Tasks[22]
目標(biāo)檢測
Incremental Few-Shot Object Detection (CVPR 2020)[23]
Incremental Learning of Object Detectors without Catastrophic Forgetting (ICCV 2017)[24]
語義分割
Modeling the Background for Incremental Learning in Semantic Segmentation (CVPR 2020)[25]
Incremental Learning Techniques for Semantic Segmentation (ICCV workshop 2019)[26]
Incremental Learning for Semantic Segmentation of Large-Scale Remote Sensing Data[27]
3.2 自然語言處理
目前增量學(xué)習(xí)的研究主要還是面向計算機視覺,在自然語言處理領(lǐng)域還沒有得到太多關(guān)注。一個主要原因是目前自然語言處理社區(qū)的注意力主要集中在以BERT為代表的自監(jiān)督表示學(xué)習(xí)上,在大規(guī)模預(yù)訓(xùn)練模型的推廣下,增量學(xué)習(xí)的應(yīng)用價值就不是太明顯了。
LAMOL: LAnguage MOdeling for Lifelong Language Learning (ICRL 2020)[28]
Episodic Memory in Lifelong Language Learning (NIPS 2019)[29]
Continual Learning for Sentence Representations Using Conceptors (NAACL 2019)[30]
Neural Topic Modeling with Continual Lifelong Learning (ICML 2020)[31]
Incremental Natural Language Processing: Challenges, Strategies, and Evaluation (COLING 2018)[32]
3.3 機器人
機器人是增量學(xué)習(xí)天然的應(yīng)用場景,因為機器人必須學(xué)會通過連續(xù)的觀察來適應(yīng)環(huán)境并與之互動,增量學(xué)習(xí)正好能夠很好地刻畫真實世界的環(huán)境,不過機器人領(lǐng)域本身有很多更重要的問題需要解決,因此增量學(xué)習(xí)的應(yīng)用也不太多。
Continual Learning for Robotics: Definition, Framework, Learning Strategies, Opportunities and Challenges[33]
Efficient Adaptation for End-to-End Vision-Based Robotic Manipulation (ICML workshop 2020)[34]
4. 增量學(xué)習(xí)面臨的問題和挑戰(zhàn)
4.1 定量評估指標(biāo)
增量學(xué)習(xí)的一些常見評估指標(biāo)包括「準(zhǔn)確率、記憶能力和遷移能力」等,其中記憶能力和遷移能力是衡量模型可塑性和穩(wěn)定性的指標(biāo),但這些指標(biāo)具體的公式定義卻是有爭議的。雖然人們已經(jīng)提出了各種各樣的增量學(xué)習(xí)方法,但是在基準(zhǔn)數(shù)據(jù)集的選取和評估算法有效性的指標(biāo)上還沒有達成廣泛的共識。
其中一點是增量學(xué)習(xí)通常需要引入額外的超參數(shù)來平衡模型的穩(wěn)定性和可塑性,這些超參數(shù)通常在驗證集上被優(yōu)化,「但這本質(zhì)上違反了增量學(xué)習(xí)不能獲取未來數(shù)據(jù)的因果律,從而會導(dǎo)致人們作出過于樂觀的結(jié)論,在真實的生產(chǎn)環(huán)境中常常無法重現(xiàn)實驗結(jié)果。」
針對超參數(shù)選取的問題,A continual learning survey: Defying forgetting in classification tasks (2020)[35]提出了一種通用的增量學(xué)習(xí)超參數(shù)搜索框架,并設(shè)計了一系列相對公平的指標(biāo)來比較增量學(xué)習(xí)算法,匯報了一些SOTA增量學(xué)習(xí)算法的表現(xiàn)。
在此基礎(chǔ)上,Class-incremental learning: survey and performance evaluation (2020)[36]在多個數(shù)據(jù)集上對最新的一些增量學(xué)習(xí)方法進行了綜合對比,作者發(fā)現(xiàn)在基于正則化的增量學(xué)習(xí)中,最早提出的LwF算法的表現(xiàn)是相當(dāng)穩(wěn)健的,許多后續(xù)改進的方法在一些條件下反而不如LwF算法,另外基于數(shù)據(jù)約束的方法(LwF)實際上通常比基于參數(shù)約束的方法(EWC)表現(xiàn)得更好,然而目前人們的研究注意力是偏向后者的。下面是另外一些討論和提出增量學(xué)習(xí)評估指標(biāo)和模型對比的論文,這里不再一一介紹:
A comprehensive, application-oriented study of catastrophic forgetting in DNNs (ICLR 2019)[37]
Don’t forget, there is more than forgetting: new metrics for Continual Learning (ICML workshop 2020)[38]
Towards robust evaluations of continual learning[39]
4.2 真正的增量學(xué)習(xí)
增量學(xué)習(xí)本身是一個很開放的概念,目前人們研究的基于深度學(xué)習(xí)的增量學(xué)習(xí)大多限制在「有監(jiān)督分類、任務(wù)式增量和多頭網(wǎng)絡(luò)結(jié)構(gòu)的框架」下,這種特定領(lǐng)域的訓(xùn)練方案通常不能直接應(yīng)用于高度動態(tài)化和非結(jié)構(gòu)化的真實環(huán)境中,Towards Robust Evaluations of Continual Learning[40]指出「多頭設(shè)定下的增量學(xué)習(xí)隱藏了增量學(xué)習(xí)問題真正的難度」。另外,雖然目前人們主要研究的是有監(jiān)督學(xué)習(xí),但探索更接近真實環(huán)境的無監(jiān)督增量學(xué)習(xí),以及其他類型的增量方式也是非常有意義的。
目前的增量學(xué)習(xí)方法通?!鸽[式地要求任務(wù)的性質(zhì)差異不能太大」,當(dāng)任務(wù)的性質(zhì)和難度差異太大時,大部分增量學(xué)習(xí)方法的性能都會嚴(yán)重下降,甚至低于簡單的基線模型。另外,有不少研究表明「目前還沒有任何一種增量學(xué)習(xí)方法在任何條件下都能表現(xiàn)良好」,大部分增量學(xué)習(xí)方法「對模型結(jié)構(gòu),數(shù)據(jù)性質(zhì)、超參設(shè)定都比較敏感」,因此探索在所有任務(wù)設(shè)定中表現(xiàn)更穩(wěn)健的增量學(xué)習(xí)方法也是很有意義的。
責(zé)任編輯:lq
-
圖像分類
+關(guān)注
關(guān)注
0文章
89瀏覽量
11889 -
機器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8306瀏覽量
131848
原文標(biāo)題:增量學(xué)習(xí)(Incremental Learning)小綜述
文章出處:【微信號:zenRRan,微信公眾號:深度學(xué)習(xí)自然語言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論