# 深度学习
## 深度學習簡介
* 發展歷史
* 包含領域: 統計、信息、計算機、神經、心理、生物
* 圖靈提出圖靈測試
* 赫布提出赫布理論: 強化合意行為、懲罰不合意行為
* 深度學習新發展
* 需要大量數據、大量時間、需有理論保證
* 丟棄法
* 目的: 為了避免過擬合
* 核心概念:在訓練網絡中加入噪音
* 如:訓練時將任一參數調為隨機數、在訓練時隨機將一隱藏層置零
* 注意力模型(?
* 核心概念: 仿人類視覺注意力機制,將更多資源關注相對重要處
* 目的: 在不增加參數的前提下,增加記憶容量與複雜度
* 如: 在翻譯句子中的詞語時,將該詞語賦予更高權重、其餘詞語較低權重
* 記憶網絡&神經編碼器/解釋器
* 核心概念: 將過去的結果當成這次的輸入
* 目的: 持續修改模型內部狀態,模擬推理過程
* 如: 長短期記憶(昨天是周一當成今天周幾的輸入)
* 生成對抗網路GAN
* 核心概念: 鑑定師與仿畫家的比賽,仿畫家不斷生成贗品並根據鑑定師的評論回去修改
* 優勢: 可增加資料量,非監督學習等
* 多GPU分布式併行
* 深度學習框架
* 甚麼是框架: 將代碼模塊化的工具,支援不同平台
* 常見框架: TensorFlow, MxNet, PyTorch
* 深度學習特點
* 可以看做許多簡單函數組成的複雜函數
* 端到端: 不是將單獨調適拼湊成系統,而是將系統拼起來一起訓練(不同步驟會互相影響)
* 詞袋算法: 一種自然語言處理方法,訓練時不考慮詞語的順序(因為無法確定人工決定順序是好的)
## 編程入門
* 內存管理: Basic/RAM
* 求梯度: Basic/gradient
## 深度學習基礎
* 線性回歸
* 核心概念
* f(X) = y = x~1~ * w~1~ + x~2~ * w~2~ + b
* 其中模型參數為w(權重)與b(偏差)
* 名詞介紹
* 訓練集(多棟房屋),樣本(一棟房屋),標籤(價格),特徵(x值)
* 損失函數(平方損失) 
* 用神經網絡圖表示線性回歸:
* 
* 單層神經網絡(線性回歸), 因為輸入層不參與計算
* 此輸出層又稱全連接層(稠密層): 輸出層與輸入層完全相連
* 代碼: linear/
* 小批量隨機梯度下降
* 核心概念:
* 目的: 在有限次疊代中,找到正確參數,儘可能降低損失函數值
* 手法:
* 隨機初始化起始位置
* 每回合隨機採樣
* 得到該樣本平均梯度
* 移動 = 平均梯度 * 學習率(學習率隨時間遞減)
* Softmax
* 核心概念
* 目的: 處理分類問題
* 細節: 輸出層做標準化(全部輸出層的值和=1),取argmax為解答
* 算法:
* 
* 取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的不重合子集,每次验证模型时选择其中一个为验证集
* 过拟合: 发生在数据量过小&模型过于复杂
* 权重衰减
* 数学
* 
* |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`