---
# System prepended metadata

title: 深度学习
tags: [CS]

---

# 深度学习

## 深度學習簡介

* 發展歷史
    * 包含領域: 統計、信息、計算機、神經、心理、生物
    * 圖靈提出圖靈測試
    * 赫布提出赫布理論: 強化合意行為、懲罰不合意行為

* 深度學習新發展
    * 需要大量數據、大量時間、需有理論保證
    * 丟棄法
        * 目的: 為了避免過擬合
        * 核心概念:在訓練網絡中加入噪音
        * 如:訓練時將任一參數調為隨機數、在訓練時隨機將一隱藏層置零
    * 注意力模型(?
        * 核心概念: 仿人類視覺注意力機制，將更多資源關注相對重要處
        * 目的: 在不增加參數的前提下，增加記憶容量與複雜度
        * 如: 在翻譯句子中的詞語時，將該詞語賦予更高權重、其餘詞語較低權重
    * 記憶網絡&神經編碼器/解釋器
        * 核心概念: 將過去的結果當成這次的輸入
        * 目的: 持續修改模型內部狀態，模擬推理過程
        * 如: 長短期記憶(昨天是周一當成今天周幾的輸入)
    * 生成對抗網路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`