{"resolved":true,"match_type":"uuid","source_type":"original_book","book_id":"cd4f7678-cd9b-4971-bde0-e9ad46a6cc71","title":"人工智能与大数据技术导论","author":null,"edition":null,"publisher":null,"year":null,"isbn":"9787302517986","requested_by":"printed_page","book":{"source_type":"original_book","book_id":"cd4f7678-cd9b-4971-bde0-e9ad46a6cc71","id":"cd4f7678-cd9b-4971-bde0-e9ad46a6cc71","uuid":"cd4f7678-cd9b-4971-bde0-e9ad46a6cc71","title":"人工智能与大数据技术导论","normalized_title":"人工智能与大数据技术导论","author":null,"edition":null,"publisher":null,"year":null,"isbn":"9787302517986","isbns":["9787302517986"],"parsed":true,"ai_readable":true,"document_type":"book","page_count":490,"navigation_url":"https://workshop.closeclaw.top/ai/book/cd4f7678-cd9b-4971-bde0-e9ad46a6cc71","title_url":"https://workshop.closeclaw.top/ai/title/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E4%B8%8E%E5%A4%A7%E6%95%B0%E6%8D%AE%E6%8A%80%E6%9C%AF%E5%AF%BC%E8%AE%BA","fixed_page_url_template":"https://workshop.closeclaw.top/ai/book/cd4f7678-cd9b-4971-bde0-e9ad46a6cc71/page/{printed_page}","path_api_url_template":"https://workshop.closeclaw.top/api/ai/book/cd4f7678-cd9b-4971-bde0-e9ad46a6cc71/page/{printed_page}","read_url":"https://workshop.closeclaw.top/api/ai/read/cd4f7678-cd9b-4971-bde0-e9ad46a6cc71","page_url":"https://workshop.closeclaw.top/api/ai/books/cd4f7678-cd9b-4971-bde0-e9ad46a6cc71/page","search_url":"https://workshop.closeclaw.top/api/ai/books/cd4f7678-cd9b-4971-bde0-e9ad46a6cc71/search"},"page":{"printed_page":154,"pdf_page":170,"physical_index":170,"physical_index_base":0,"printed_page_status":"recognized","page_sha256":"31713fae65a0c816a0de14472b4bf4d98d391560bea8c812f4397b44634c1593"},"chapter":"第5章","content":"5.4.4 梯度下降的详细算法\n\n本节内容需要读者具有一定的微积分基础。读者可跳过本节内容。在微积分里面，对多元函数的参数求∂偏导数，把求得的各个参数的偏导数以向量的形式写出来，就是梯度。比如函数 $\\operatorname { f } ( \\mathbf { x } , \\mathbf { y } )$ ，分别对x、y求偏导数，求得的梯度向量就是 $( \\partial \\mathbf { f } / \\partial \\mathbf { x } , \\partial \\mathbf { f } / \\partial \\mathbf { y } )$ ，简称 $\\mathrm { g r a d f } ( \\mathbf { x } , \\mathbf { y } )$ 。对于在点 $\\left( \\mathbf { \\boldsymbol { x } } _ { 0 } , \\mathbf { \\boldsymbol { y } } _ { 0 } \\right)$ 的具体梯度向量就是 $( \\partial \\mathbf { f } / \\partial \\mathbf { x } _ { 0 } , \\partial \\mathbf { f } / \\partial \\mathbf { y } _ { 0 } )$ ，如果是3个参数的向量梯度，就是 $( \\partial \\mathbf { f } / \\partial \\mathbf { x } , \\partial \\mathbf { f } / \\partial \\mathbf { y }$ $\\partial \\mathbf { f } / \\partial \\mathbf { z } )$ ，以此类推。那么，这个梯度向量求出来有什么意义呢？从几何意义上讲，就是函数变化增加最快的地方。具体来说，对于函数 $\\mathrm { f } ( \\mathbf { \\boldsymbol { x } } , \\mathbf { \\boldsymbol { y } } )$ ，在点 $( \\mathbf { x } _ { 0 } , \\mathbf { y } _ { 0 } )$ ，沿着梯度向量的方向，就是$( \\partial \\mathbf { f } / \\partial \\mathbf { x } _ { 0 } , \\partial \\mathbf { f } / \\partial \\mathbf { y } _ { 0 } )$ 的方向，是 $\\operatorname { f } ( \\mathbf { x } , \\mathbf { y } )$ 增加最快的地方。或者说，沿着梯度向量的方向更加容易找到函数的最大值。反过来说，沿着梯度向量相反的方向，也就是 $( \\partial \\mathbf { f } / \\partial \\mathbf { x } _ { 0 } , \\partial \\mathbf { f } / \\partial \\mathbf { y } _ { 0 } )$ 的方向，梯度减小最快，也就更加容易找到函数的最小值。\n\n梯度下降法的算法可以有代数法和矩阵法（也称向量法）两种表示，如果对矩阵分析不熟悉，则代数法更加容易理解。本节以代数法为例来讲解算法。\n\n1. 先决条件：确认优化模型的假设函数和误差函数\n\n比如对于线性回归，假设函数表示为 $\\scriptstyle \\mathrm { h } _ { 0 } ( \\mathrm { x } _ { 1 } , \\mathrm { x } _ { 2 } , . . . , \\mathrm { x } _ { \\mathrm { n } } ) = \\displaystyle \\theta _ { 0 } + \\theta _ { 1 } \\mathrm { x } _ { 1 } + . . . + \\theta _ { \\mathrm { n } } \\mathrm { x } _ { \\mathrm { n } } ,$ 其中 $\\Theta _ { \\mathrm { i } } ( \\mathrm { i } = 0 , 1 , 2 , . . . , \\mathrm { n } )$ 为模型参数， $\\mathrm { x _ { i } } ( \\mathrm { i } = 0 , 1 , 2 , . . . , \\mathrm { n } )$ 为每个样本的n个特征值。这个表示可以简化，我们增加一个特征 $\\mathrm { x } _ { 0 } { = } 1$ ，这样 $\\scriptstyle \\mathrm { h _ { \\boldsymbol { \\Theta } } ( x _ { 0 } , x _ { 1 } , \\ldots , x _ { n } ) = \\sum \\theta _ { i } x _ { i } }$ ，其中 $_ \\mathrm { i = 0 \\sim n }$ 。同样是线性回归，对应上面的假设函数，误差函数可以使用样本输出和假设函数的差取平方。\n\n2. 算法相关参数初始化\n\n主要是初始化 $\\theta _ { 0 } , \\theta _ { 1 } , . . . , \\theta _ { \\mathrm { n } }$ ，以及算法终止距离ε和步长 $a _ { \\circ }$ 在没有任何先验知识的时候，我可以将所有的 $\\theta$ 初始化为0，将步长初始化为1。在调优的时候再优化。\n\n3.算法过程\n\n(1）确定当前位置的误差函数的梯度。在微积分里面，对多元函数的参数求∂偏导数，把求得的各个参数的偏导数以向量的形式写出来，就是梯度。对于 $\\theta _ { i }$ ，其梯度表达式为∂f/∂θi,其中函数f可以是均方差函数。\n\n(2）用步长乘以误差（损失）函数的梯度得到当前位置下降的距离，即对应于前面登山例子中的某一步。\n\n(3)确定是否所有 $\\theta i$ 梯度下降的距离都小于ε，如果小于 $\\varepsilon _ { \\cdot }$ ，则算法终止，当前所有的 $\\theta _ { i }$ $( \\mathrm { i } { = } 0 , 1 , { \\ldots } , \\mathrm { n } )$ 即为最终结果。否则进入步骤4。\n\n（4)更新所有的 $\\theta ,$ 对于 $\\theta i$ ，其更新表达式如下。更新完毕后继续转入步骤（1）。\n\n$$\n\\theta _ { i } = \\theta _ { i } - \\frac { 2 r } { \\top } \\top \\top \\top \\top \\top \\top\n$$\n\n在机器学习中，无约束优化算法除了梯度下降法以外，还有前面提到的最小二乘法，此外还有牛顿法和拟牛顿法。梯度下降法和最小二乘法相比，梯度下降法需要选择步长，而最小二乘法不需要。梯度下降法是迭代求解，最小二乘法是计算解析解。如果样本量不算很大，且存在解析解，最小二乘法比起梯度下降法有优势，计算速度很快。但是如果样本量很大，用最小二乘法由于需要求一个超级大的逆矩阵，这时就很难或者很慢才能求解了，使用迭代的梯度下降法比较有优势。梯度下降法和牛顿法/拟牛顿法相比，两者都是迭代求解，不过梯度下降法是梯度求解，而牛顿法/拟牛顿法是用二阶的海森矩阵的逆矩阵或伪逆矩阵求解。相对而言，使用牛顿法/拟牛顿法收敛更快，但是每次迭代的时间比梯度下降法长。\n\n人工智能与大数据技术导论\n\n154","previous_page":153,"next_page":155}