# 深度学习 ## 深度學習簡介 * 發展歷史 * 包含領域: 統計、信息、計算機、神經、心理、生物 * 圖靈提出圖靈測試 * 赫布提出赫布理論: 強化合意行為、懲罰不合意行為 * 深度學習新發展 * 需要大量數據、大量時間、需有理論保證 * 丟棄法 * 目的: 為了避免過擬合 * 核心概念:在訓練網絡中加入噪音 * 如:訓練時將任一參數調為隨機數、在訓練時隨機將一隱藏層置零 * 注意力模型(? * 核心概念: 仿人類視覺注意力機制,將更多資源關注相對重要處 * 目的: 在不增加參數的前提下,增加記憶容量與複雜度 * 如: 在翻譯句子中的詞語時,將該詞語賦予更高權重、其餘詞語較低權重 * 記憶網絡&神經編碼器/解釋器 * 核心概念: 將過去的結果當成這次的輸入 * 目的: 持續修改模型內部狀態,模擬推理過程 * 如: 長短期記憶(昨天是周一當成今天周幾的輸入) * 生成對抗網路GAN * 核心概念: 鑑定師與仿畫家的比賽,仿畫家不斷生成贗品並根據鑑定師的評論回去修改 * 優勢: 可增加資料量,非監督學習等 * 多GPU分布式併行 * 深度學習框架 * 甚麼是框架: 將代碼模塊化的工具,支援不同平台 * 常見框架: TensorFlow, MxNet, PyTorch * 深度學習特點 * 可以看做許多簡單函數組成的複雜函數 * 端到端: 不是將單獨調適拼湊成系統,而是將系統拼起來一起訓練(不同步驟會互相影響) * 詞袋算法: 一種自然語言處理方法,訓練時不考慮詞語的順序(因為無法確定人工決定順序是好的) ## 編程入門 * 內存管理: Basic/RAM * 求梯度: Basic/gradient ## 深度學習基礎 * 線性回歸 * 核心概念 * f(X) = y = x~1~ * w~1~ + x~2~ * w~2~ + b * 其中模型參數為w(權重)與b(偏差) * 名詞介紹 * 訓練集(多棟房屋),樣本(一棟房屋),標籤(價格),特徵(x值) * 損失函數(平方損失) ![](https://i.imgur.com/aCoS89l.png) * 用神經網絡圖表示線性回歸: * ![](https://i.imgur.com/mJd99wA.png) * 單層神經網絡(線性回歸), 因為輸入層不參與計算 * 此輸出層又稱全連接層(稠密層): 輸出層與輸入層完全相連 * 代碼: linear/ * 小批量隨機梯度下降 * 核心概念: * 目的: 在有限次疊代中,找到正確參數,儘可能降低損失函數值 * 手法: * 隨機初始化起始位置 * 每回合隨機採樣 * 得到該樣本平均梯度 * 移動 = 平均梯度 * 學習率(學習率隨時間遞減) * Softmax * 核心概念 * 目的: 處理分類問題 * 細節: 輸出層做標準化(全部輸出層的值和=1),取argmax為解答 * 算法: * ![](https://i.imgur.com/OoPxsK1.png) * 取argMax(o)為輸出值 ## 基础 * SoftMax * 与线性回归相同,将输入值做线性叠加,但是输出值 = 类别数,输出值是和为1的几率值 * 交叉熵损失函数:(只考虑发生几率最大的项是否足够大) * ℓ(Θ) = 1n ∑ (1/n) * H (y(i), yˆ(i)) * 其中 H (y(i), yˆ(i)) = y(i) log yˆ(i) -> 简单来说就是logN (N = 最大的几率) * 最⼤似然估计(好像没啥关系): * 已知部份数据的实验结果后,算出最有可能的几率(因为每个几率都可导出满足此结果的几率) * 如: 拿出的球中,白球40%黑球60%,此结果发生几率 = p*0.4+(1-p)*0.6,对p求导->当p = 0.4时能最佳解释结果 * 多层感知机 * 至少有一层全连接隐藏层,隐藏层输出经过非线性映射 * 隐藏层映射: H = ϕ(XWh + bh) 其中ϕ非线性函数 * 输出层映射: O = HWo + bo * 实际上映射仍与单层相同,因为多加一层只是复合映射,实质上并无分别 -> 引入非线性映射(激活函数) * ReLU = max(0,x),sigmoid,tanh * 误差 * 训练误差: 训练集的答错率 * 泛化误差: 测试集的答错率 * 验证集: 用来检测最优模型 * K折交叉验证: 将数据集分为K的不重合子集,每次验证模型时选择其中一个为验证集 * 过拟合: 发生在数据量过小&模型过于复杂 * 权重衰减 * 数学 * ![](https://i.imgur.com/bMQT74H.jpg) * |B|是小批量,nita是学习率,lamda是超参数(控制正则惩罚的数值) * 原理: * 用w的长度/偏差元素的平⽅和来设定L2正则惩罚 * 丢弃法 * 原理: 随机丢弃n个隐藏层使得模型不过度依赖某层,为了确保稳定性通常不这样做 * 数学: * 每个隐藏层有p的几率遭到丢弃 * 没被丢弃的隐藏层 h' = h/(i-p) -> 丢弃前后总输入值不变 * 备注: * 靠近输入层的丢弃概率设的小一点 * 只在训练时使用丢弃法(测试时不用) * 传播 * 正向传播: 某点的线性映射得到下一点 * 反向传播: 对某点损失函数往回求映射的偏导 * 依赖关系 * 正向依赖反向: 正向传递值的更新依赖于反向的计算 * 反向依赖正向: 反向的值来源于正向 * 其他: 正向运算完不能释放内存(反向要用) -> 训练时内从开销 > 预测时 * 稳定性 * 衰减: 若每层变化都缩小,深度足够大时数值足够小 * 爆炸: 若每层变化都放大,深度足够大时数值足够大 * 初始化数值 * 如果全连接层参数相同,又每次输入同 -> 多个等同于一个在作用 * Mxnet: 在 -0.07 ~ 0.07 间随机初始化 * Xavier: 在 ( √ 6 / a + b , √ 6 / a + b) 区间随机初始化 ###### tags: `CS`