時(shí)機(jī)器學(xué)習(xí)大綱:從算法原理到面試復(fù)習(xí)的完整地圖)
簡介《機(jī)器學(xué)習(xí)教學(xué)大綱》是一份面向計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)研究生的PDF教學(xué)文檔用于系統(tǒng)規(guī)劃機(jī)器學(xué)習(xí)課程教學(xué)。大綱明確教學(xué)對象與目的指出機(jī)器學(xué)習(xí)融合人工智能、概率統(tǒng)計(jì)、控制論等多學(xué)科成果并圍繞核心算法與理論展開。文檔共1個PDF文件壓縮包僅27KB輕量便攜適合教師備課、研究生自習(xí)或課程設(shè)計(jì)參考。目前已有47人學(xué)習(xí)下載。內(nèi)容預(yù)覽顯示大綱詳列九大教學(xué)章節(jié)緒論、概念學(xué)習(xí)、決策樹、人工神經(jīng)網(wǎng)絡(luò)、假設(shè)評估、貝葉斯學(xué)習(xí)、計(jì)算學(xué)習(xí)理論、基于實(shí)例的學(xué)習(xí)與增強(qiáng)學(xué)習(xí)每章標(biāo)注建議學(xué)時(shí)和關(guān)鍵知識點(diǎn)如ID3算法、BP算法、樸素貝葉斯分類器、Q學(xué)習(xí)算法等同時(shí)包含16學(xué)時(shí)的實(shí)踐環(huán)節(jié)要求用Java實(shí)現(xiàn)決策樹、神經(jīng)網(wǎng)絡(luò)、貝葉斯分類器、K近鄰及Q學(xué)習(xí)算法并指定教材《Machine Learning》Tom M. Mitchell著。整體結(jié)構(gòu)完整從理論到實(shí)踐安排清晰是實(shí)用性強(qiáng)、便于直接使用的教學(xué)指導(dǎo)資源。1. 一份 54 學(xué)時(shí)的研究生機(jī)器學(xué)習(xí)大綱能當(dāng)面試題庫用這份《機(jī)器學(xué)習(xí)教學(xué)大綱》不是通俗入門讀物而是按 Tom M. Mitchell 的經(jīng)典教材《Machine Learning》搭出來的研究生課程序骨架54 學(xué)時(shí)9 章教學(xué)內(nèi)容5 個編程實(shí)驗(yàn)。哪怕你不上這門課它也是一份很好的「算法地圖」——決策樹、神經(jīng)網(wǎng)絡(luò)、貝葉斯、強(qiáng)化學(xué)習(xí)全在里面每章標(biāo)注了學(xué)時(shí)等于告訴你在每個知識點(diǎn)上具備什么程度的了解是合理的。對準(zhǔn)備算法崗面試的人或者想把機(jī)器學(xué)習(xí)知識體系重新捋一遍的從業(yè)者來說照著這份大綱做一輪復(fù)習(xí)比刷幾十篇零散公眾號文章都要穩(wěn)。下面我會拆開講這份大綱怎么用實(shí)驗(yàn)怎么做以及哪些地方容易踩坑。2. 先看全局54 學(xué)時(shí)怎么分配哪些章才是主戰(zhàn)場2.1 用學(xué)時(shí)分配判斷課程重心大綱寫得很清楚總學(xué)時(shí) 54其中講授 38 學(xué)時(shí)實(shí)踐環(huán)節(jié) 16 學(xué)時(shí)。講授部分分成 8 章實(shí)際列了 9 節(jié)緒論之后是概念學(xué)習(xí)、決策樹、神經(jīng)網(wǎng)絡(luò)、評估假設(shè)、貝葉斯學(xué)習(xí)、計(jì)算學(xué)習(xí)理論、基于實(shí)例的學(xué)習(xí)、增強(qiáng)學(xué)習(xí)??磳W(xué)時(shí)就能看出課程的重點(diǎn)——決策樹和神經(jīng)網(wǎng)絡(luò)各占 6 學(xué)時(shí)貝葉斯學(xué)習(xí)也是 6 學(xué)時(shí)這三個是最大的塊緒論和概念學(xué)習(xí)各 4 學(xué)時(shí)屬于打地基評估假設(shè) 3 學(xué)時(shí)計(jì)算學(xué)習(xí)理論 3 學(xué)時(shí)基于實(shí)例的學(xué)習(xí) 3 學(xué)時(shí)增強(qiáng)學(xué)習(xí) 3 學(xué)時(shí)屬于「知道原理、會跑通實(shí)驗(yàn)」的級別。提示如果你是自學(xué)別平均用力。按學(xué)時(shí)權(quán)重安排復(fù)習(xí)時(shí)間決策樹、神經(jīng)網(wǎng)絡(luò)、貝葉斯三塊花 60% 的時(shí)間其余章節(jié)以理解概念和能跑通代碼為主。2.2 教材章節(jié)和這份大綱的對應(yīng)關(guān)系大綱指定教材是 Tom M. Mitchell 的《Machine Learning》機(jī)械工業(yè)出版社引進(jìn)版。這本書第一章是概述第二章是概念學(xué)習(xí)和一般到特殊序第三章決策樹學(xué)習(xí)第四章人工神經(jīng)網(wǎng)絡(luò)第五章評估假設(shè)第六章貝葉斯學(xué)習(xí)第七章計(jì)算學(xué)習(xí)理論第八章基于實(shí)例的學(xué)習(xí)第九章增強(qiáng)學(xué)習(xí)——大綱的章節(jié)順序和教材完全對齊。這里有個容易被忽略的點(diǎn)Mitchell 這本書出版年代早沒有深度學(xué)習(xí)相關(guān)內(nèi)容大綱也刻意沒提 CNN、RNN、Transformer。如果你需要用這份大綱準(zhǔn)備面試一定要自己補(bǔ)上「深度學(xué)習(xí)怎么融入傳統(tǒng)機(jī)器學(xué)習(xí)框架」這部分否則別人問你「神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)的區(qū)別」你只能答出 BP 算法就露怯了。2.3 實(shí)踐環(huán)節(jié) 16 學(xué)時(shí)意味著什么實(shí)踐環(huán)節(jié)不是點(diǎn)綴是硬性要求。大綱列了五個實(shí)驗(yàn)決策樹、BP 神經(jīng)網(wǎng)絡(luò)、貝葉斯分類器、K-近鄰、Q 學(xué)習(xí)語言指定 Java。16 學(xué)時(shí)對應(yīng)五個算法平均每個算法 3 學(xué)時(shí)左右這個時(shí)間量說明實(shí)驗(yàn)難度不是讓你從零手寫最優(yōu)實(shí)現(xiàn)而是「能調(diào)通、能跑出結(jié)果、能解釋原理」。很多初學(xué)者容易在這里翻車——一上來就想寫個完美的決策樹剪枝實(shí)現(xiàn)結(jié)果卡在細(xì)節(jié)里出不來。這個課的要求是基礎(chǔ)版本能跑不是讓你發(fā)論文。3. 決策樹和神經(jīng)網(wǎng)絡(luò)大綱里最核心的兩塊值得掰開揉碎3.1 ID3 算法的原理和參數(shù)含義決策樹學(xué)習(xí)占了 6 學(xué)時(shí)是整門課第一個硬骨頭。大綱里明確寫了要講 ID3 算法、屬性選擇度量、過度擬合、連續(xù)值屬性處理。ID3 的核心邏輯不復(fù)雜每次選一個屬性做劃分讓劃分后的數(shù)據(jù)純度最高純度的度量用信息增益。信息增益的計(jì)算方式是這樣先算劃分前的熵再算按某個屬性劃分后的條件熵兩者相減就是增益。選增益最大的屬性作為當(dāng)前節(jié)點(diǎn)的劃分屬性然后遞歸。這里有一個關(guān)鍵的參數(shù)叫「停止條件」你如果不設(shè)樹會一直長到每個葉子只有一個樣本結(jié)果必然過擬合。大綱里提到的「修剪」就是干這個的。我用 Python 給你寫一個最簡的 ID3 劃分邏輯方便理解import numpy as np from collections import Counter def entropy(y): 計(jì)算標(biāo)簽的熵 counter Counter(y) total len(y) ent 0.0 for count in counter.values(): p count / total ent - p * np.log2(p) return ent def information_gain(X_column, y, split_value): 按 split_value 把 X_column 分成兩組算信息增益 left_mask X_column split_value right_mask ~left_mask y_left, y_right y[left_mask], y[right_mask] if len(y_left) 0 or len(y_right) 0: return 0.0 ent_before entropy(y) ent_after (len(y_left) / len(y)) * entropy(y_left) (len(y_right) / len(y)) * entropy(y_right) return ent_before - ent_after這段代碼的邏輯是entropy算熵information_gain按某個閾值把連續(xù)值屬性分成兩組算劃分前后的熵差。這里你注意對于連續(xù)值屬性常見做法是對所有可能的切分點(diǎn)都算一遍增益取最大的那個。大綱里說的「定義新的離散值屬性」就是這個意思——把連續(xù)值離散化成區(qū)間。決策樹這塊面試常問的三個問題信息增益偏向多取值屬性怎么辦答案是增益率C4.5 的做法樹太深過擬合怎么處理預(yù)剪枝、后剪枝、限制葉子最少樣本數(shù)連續(xù)值屬性怎么處理二分法離散化。大綱只講了 ID3但你自己復(fù)習(xí)時(shí)要把 C4.5 和 CART 都帶上。3.2 反向傳播算法的梯度下降本質(zhì)神經(jīng)網(wǎng)絡(luò) 6 學(xué)時(shí)重點(diǎn)是感知器、delta 法則、反向傳播。大綱里明確寫了「收斂性、局部極小值」——這是 BP 算法最有名的兩個坑。感知器的訓(xùn)練法則就是最樸素的梯度下降算誤差按誤差調(diào)整權(quán)重。delta 法則引入了一個關(guān)鍵改動——用 Sigmoid 這樣的可導(dǎo)激活函數(shù)替代階躍函數(shù)這樣誤差函數(shù)變成連續(xù)的可以求梯度。反向傳播的本質(zhì)就是鏈?zhǔn)角髮?dǎo)輸出層的誤差先算出來然后逐層往回傳每一層根據(jù)傳來的誤差信號更新自己的權(quán)重。寫一個最簡的 BP 權(quán)重更新片段def bp_update(weights, activations, deltas, lr): weights: 各層權(quán)重列表 activations: 各層激活值列表 deltas: 各層誤差項(xiàng)列表 lr: 學(xué)習(xí)率 new_weights [] for i in range(len(weights)): # 當(dāng)前層的權(quán)重更新 學(xué)習(xí)率 * 上一層激活值 * 當(dāng)前層誤差 grad np.outer(activations[i], deltas[i]) new_weights.append(weights[i] - lr * grad) return new_weights這里的lr是學(xué)習(xí)率np.outer算的是外積——因?yàn)橐粋€神經(jīng)元的權(quán)重更新量等于「輸入 × 誤差」一批輸入就變成外積。學(xué)習(xí)率設(shè)太大會震蕩不收斂設(shè)太小收斂太慢大綱里沒給標(biāo)準(zhǔn)答案實(shí)際調(diào)參時(shí)我一般從 0.01 開始試配合每輪檢查訓(xùn)練誤差。注意BP 的局部極小值問題到今天也沒有徹底解決。常見的做法是隨機(jī)多次初始化權(quán)重、用動量項(xiàng)跳過局部極小、或者用 Adam 這類自適應(yīng)學(xué)習(xí)率優(yōu)化器。面試被問到「BP 的缺點(diǎn)」時(shí)能說出這三個應(yīng)對方案就夠用了。4. 實(shí)驗(yàn)環(huán)節(jié)五個 Java 算法怎么落地4.1 實(shí)驗(yàn)環(huán)境怎么搭Java 版本選哪個大綱指定 Java這個選擇是合理的——Mitchell 教材里的偽代碼是語言無關(guān)的Java 的強(qiáng)類型特性反而能逼著你把數(shù)據(jù)結(jié)構(gòu)想清楚。我的建議是用 Java 11 以上版本不用額外框架標(biāo)準(zhǔn)庫就夠。每個實(shí)驗(yàn)建一個獨(dú)立類數(shù)據(jù)用 CSV 讀入算法核心代碼控制在 200 行以內(nèi)——如果超過 300 行說明你在某個細(xì)節(jié)上鉆牛角尖了。五個實(shí)驗(yàn)的難度排序K-近鄰最簡單純距離計(jì)算無訓(xùn)練過程貝葉斯分類器次之算先驗(yàn)和條件概率決策樹中等遞歸結(jié)構(gòu)要理清BP 神經(jīng)網(wǎng)絡(luò)偏難鏈?zhǔn)角髮?dǎo)容易算錯Q 學(xué)習(xí)最難獎勵函數(shù)設(shè)計(jì)和收斂性調(diào)試都很費(fèi)時(shí)間。4.2 決策樹實(shí)驗(yàn)的步驟和關(guān)鍵參數(shù)決策樹實(shí)驗(yàn)的目標(biāo)是從零實(shí)現(xiàn) ID3或者做一個簡化版 C4.5。我建議你按這個順序做第一步數(shù)據(jù)準(zhǔn)備。用 Iris 數(shù)據(jù)集或者 UCI 上的 Car Evaluation 數(shù)據(jù)集兩個都適合決策樹。Car Evaluation 是離散屬性不用處理連續(xù)值適合第一版Iris 有連續(xù)值適合第二版練手。第二步實(shí)現(xiàn)核心數(shù)據(jù)結(jié)構(gòu)。樹節(jié)點(diǎn)至少要有三個字段attributeIndex劃分屬性下標(biāo)、children子節(jié)點(diǎn)映射、label葉子節(jié)點(diǎn)的類別標(biāo)簽。第三步實(shí)現(xiàn)遞歸建樹。偽代碼邏輯是這樣的public TreeNode buildTree(int[][] data, int[] labels, int depth) { if (allSame(labels)) return new TreeNode(labels[0]); // 純節(jié)點(diǎn)直接當(dāng)葉子 if (data.length 0 || depth MAX_DEPTH) return new TreeNode(majority(labels)); int bestAttr selectBestAttribute(data, labels); // 算信息增益找最大 TreeNode node new TreeNode(bestAttr); for (int value : getAllValues(bestAttr)) { int[] subData filter(data, bestAttr, value); int[] subLabels filterLabels(labels, bestAttr, value); node.children.put(value, buildTree(subData, subLabels, depth 1)); } return node; }第四步加剪枝。大綱特意提到了「修剪」來解決過度擬合最簡單的實(shí)現(xiàn)是「后剪枝」樹建完后從底往上檢查如果某個子樹替換成葉子節(jié)點(diǎn)后在驗(yàn)證集上精度不降就剪掉。這個實(shí)驗(yàn)最值得調(diào)的地方是MAX_DEPTH最大深度和「葉子最少樣本數(shù)」前者直接控制模型復(fù)雜度后者控制過擬合程度。我一般先不設(shè)限讓樹完全長出來然后看訓(xùn)練集精度和驗(yàn)證集精度之差超過 5 個點(diǎn)就說明過擬合了再逐步加約束。4.3 BP 神經(jīng)網(wǎng)絡(luò)和 Q 學(xué)習(xí)的實(shí)驗(yàn)設(shè)計(jì)要點(diǎn)BP 神經(jīng)網(wǎng)絡(luò)實(shí)驗(yàn)的關(guān)鍵不在于網(wǎng)絡(luò)有多深而在于你能否把「前向傳播 → 計(jì)算誤差 → 反向傳播 → 更新權(quán)重」這條鏈路完整跑通。建議用三層結(jié)構(gòu)輸入層神經(jīng)元數(shù) 特征維度隱藏層 4~8 個神經(jīng)元太多容易過擬合太少欠擬合輸出層按類別數(shù)設(shè)定。訓(xùn)練時(shí)打亂樣本順序每輪記錄訓(xùn)練誤差畫一條曲線——如果誤差在震蕩降低學(xué)習(xí)率如果誤差停在某個值不再下降檢查是不是梯度消失了。Q 學(xué)習(xí)實(shí)驗(yàn)是最容易讓人放棄的一個。核心是維護(hù)一張 Q 表鍵是狀態(tài)-動作對值是累計(jì)獎勵的估計(jì)。迭代更新公式是Q(s, a) Q(s, a) alpha * (r gamma * max(Q(s, a)) - Q(s, a))這里的alpha是學(xué)習(xí)率gamma是折扣因子。大綱提到了「實(shí)驗(yàn)策略」——這個要用 epsilon-greedy以 epsilon 的概率隨機(jī)探索否則選 Q 值最大的動作。epsilon 初始設(shè) 0.9隨著迭代衰減到 0.1。public void updateQ(String state, String action, double reward, String nextState, double alpha, double gamma) { double currentQ qTable.getOrDefault(state action, 0.0); double maxNextQ getMaxQ(nextState); double newQ currentQ alpha * (reward gamma * maxNextQ - currentQ); qTable.put(state action, newQ); }這五個實(shí)驗(yàn)都完成后你應(yīng)該能感受到一件事算法原理看著不難但跑起來全在細(xì)節(jié)里——數(shù)據(jù)格式不對、維度沒對齊、終止條件設(shè)錯任何一個都能讓結(jié)果變成一團(tuán)亂麻。這就是為什么我建議你用一個公開數(shù)據(jù)集跑通再換自己的數(shù)據(jù)先確保算法本身沒問題再談?wù){(diào)優(yōu)。5. 避坑指南照著大綱自學(xué)的人最容易在四個地方翻車5.1 坑一把「讀取數(shù)據(jù)格式」當(dāng)成「特征工程」現(xiàn)象照著大綱實(shí)驗(yàn)要求做決策樹數(shù)據(jù)讀進(jìn)來直接開跑結(jié)果準(zhǔn)確率奇低不到 60%。原因你用的數(shù)據(jù)集大概率有缺失值、有字符串型類別特征、有不同量綱的數(shù)值特征。ID3 原生只處理離散屬性你如果不做預(yù)處理算法根本沒法正確劃分。解決寫一個數(shù)據(jù)清洗函數(shù)先處理缺失值用眾數(shù)填充或者直接刪行再把字符串類別映射成整數(shù)最后對數(shù)值特征做離散化按分位數(shù)切分成幾個區(qū)間。這一步做到位準(zhǔn)確率通常能提升 10 個百分點(diǎn)以上。5.2 坑二BP 神經(jīng)網(wǎng)絡(luò)「前向能跑通反向全是錯」現(xiàn)象訓(xùn)練誤差在前幾輪下降后突然反彈有時(shí)候甚至變成 NaN。原因大多數(shù)人手推 BP 時(shí)只寫了前向傳播反向傳播的維度沒對齊。最常見的錯誤是把「當(dāng)前層誤差項(xiàng)」和「上一層誤差項(xiàng)」的矩陣乘法方向搞反或者忘記對激活函數(shù)求導(dǎo)。另一個常見原因是學(xué)習(xí)率太大權(quán)重更新步長過大直接越過最優(yōu)點(diǎn)導(dǎo)致發(fā)散。解決先寫一個「梯度檢查」函數(shù)——用數(shù)值方法求近似梯度給權(quán)重加一個很小的擾動算導(dǎo)數(shù)和你的反向傳播梯度對比誤差在 1e-4 以內(nèi)就說明反向傳播寫對了。這一步能把你排查 bug 的時(shí)間從兩小時(shí)壓縮到十分鐘。如果用 Java 寫就麻煩一些但那五個實(shí)驗(yàn)里 BP 和 Q 學(xué)習(xí)是公認(rèn)最容易出 bug 的你在 Java 里也要保留一套小樣本數(shù)據(jù)做單步調(diào)試。5.3 坑三Q 學(xué)習(xí)不收斂以為是算法問題其實(shí)是「獎勵函數(shù)沒設(shè)計(jì)好」現(xiàn)象Q 學(xué)習(xí)跑了 5000 個 episodeQ 表還在震蕩agent 始終學(xué)不到穩(wěn)定策略。原因獎勵函數(shù)太稀疏或者太稠密。太稀疏比如只有到終點(diǎn)才給 1會導(dǎo)致探索效率極低太稠密比如每一步都給一個小懲罰會導(dǎo)致 agent 學(xué)會了「盡快結(jié)束」而不是「走最優(yōu)路徑」。解決檢查你的獎勵函數(shù)——如果目標(biāo)是「走到終點(diǎn)得分」建議每走一步給一個微小的負(fù)獎勵比如 -0.01到達(dá)終點(diǎn)給 10走進(jìn)死胡同給 -5。這寫進(jìn)大綱里的「Q 函數(shù)的設(shè)計(jì)」——大綱原文就提到了 Q 函數(shù)設(shè)計(jì)是 Q 學(xué)習(xí)算法要解決的關(guān)鍵問題之一你真到實(shí)驗(yàn)環(huán)節(jié)才會明白它為什么被單獨(dú)列出來。5.4 坑四光看教材不看實(shí)現(xiàn)考完就忘現(xiàn)象照著大綱學(xué)完一遍教材看完了實(shí)驗(yàn)做完了一個月后面試官問「ID3 的信息增益公式推導(dǎo)一下」你只記得大概。原因多數(shù)人把教材當(dāng)小說看看一遍以為自己會了其實(shí)沒經(jīng)過「從公式到代碼」的轉(zhuǎn)換。Mitchell 這本書的偽代碼風(fēng)格偏學(xué)術(shù)和真實(shí)可運(yùn)行的代碼差距不小。解決每學(xué)完一章抽一個小數(shù)據(jù)集不看參考代碼從零實(shí)現(xiàn)一遍。決策樹用 Iris神經(jīng)網(wǎng)絡(luò)用 XOR 問題這個尤其能驗(yàn)證你的 BP 寫對了因?yàn)?XOR 不可線性分割貝葉斯用垃圾郵件分類的簡化版。這個方法雖然慢但學(xué)到的深度是單純看書比不了的。提示這份大綱里有一章的標(biāo)題容易被忽略——「計(jì)算學(xué)習(xí)理論」里面講 PAC 可學(xué)習(xí)性和 VC 維。面試偶爾會問到但如果只看教材可能一頭霧水。我的建議是先記住兩個結(jié)論——有限假設(shè)空間的樣本復(fù)雜度是 O(log|H|)無限假設(shè)空間的樣本復(fù)雜度由 VC 維決定具體推導(dǎo)不必深究知道結(jié)論和直覺就夠應(yīng)付大多數(shù)場合。6. 用大綱的學(xué)時(shí)權(quán)重做一輪針對性復(fù)習(xí)效率會高不少6.1 按學(xué)時(shí)權(quán)重分配七天復(fù)習(xí)計(jì)劃如果你已經(jīng)工作想利用這份大綱把基礎(chǔ)補(bǔ)一遍我建議按學(xué)時(shí)比例壓縮成一個七天計(jì)劃第一天看緒論和概念學(xué)習(xí)對應(yīng) 8 學(xué)時(shí)第二天啃決策樹6 學(xué)時(shí)第三天做 BP 神經(jīng)網(wǎng)絡(luò)6 學(xué)時(shí)第四天過一遍評估假設(shè)和貝葉斯9 學(xué)時(shí)第五天看計(jì)算學(xué)習(xí)理論和基于實(shí)例的學(xué)習(xí)6 學(xué)時(shí)第六天做 Q 學(xué)習(xí)3 學(xué)時(shí)第七天統(tǒng)一刷一遍五個實(shí)驗(yàn)的代碼。這份大綱最好用的是「決策樹、神經(jīng)網(wǎng)絡(luò)、貝葉斯」這三個 6 學(xué)時(shí)章節(jié)。它們對應(yīng)面試中最常問的三大塊樹模型、神經(jīng)網(wǎng)絡(luò)基礎(chǔ)、概率圖模型。最后一個 Q 學(xué)習(xí)雖然只有 3 學(xué)時(shí)但很多面試官喜歡拿它當(dāng)切入點(diǎn)考察你對「獎勵設(shè)計(jì)」的理解值得花一天把代碼跑通。6.2 一個值得養(yǎng)成的習(xí)慣把大綱當(dāng)「待辦清單」而不是「教科書目錄」我拆這份大綱的時(shí)候有一個明顯的體會它是一份「自檢清單」性質(zhì)的文檔。每章標(biāo)的學(xué)時(shí)數(shù)暗示了教學(xué)期望——花 6 學(xué)時(shí)講的東西大概率是要求學(xué)生「能默寫出算法步驟」的花 3 學(xué)時(shí)講的東西只需要「能說出原理和適用場景」。你復(fù)習(xí)時(shí)給自己做個映射哪些算法要求「會手推」哪些要求「會調(diào)庫」哪些要求「能講明白」。比如決策樹的信息增益計(jì)算屬于「必須會手推」級別而 Q 學(xué)習(xí)的收斂性證明屬于「知道結(jié)論即可」級別。這樣你的復(fù)習(xí)時(shí)間不會被均勻分配在無關(guān)緊要的細(xì)節(jié)上。從那以后我每次拿到一份教學(xué)大綱或者課程目錄式的 PDF第一反應(yīng)都是先把學(xué)時(shí)標(biāo)出來按權(quán)重排復(fù)習(xí)優(yōu)先級再動手看具體內(nèi)容。這個方法用起來很省心希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取