René's URL Explorer Experiment


Title: 深入机器学习的梯度优化 · Issue #51 · aialgorithm/Blog · GitHub

Open Graph Title: 深入机器学习的梯度优化 · Issue #51 · aialgorithm/Blog

X Title: 深入机器学习的梯度优化 · Issue #51 · aialgorithm/Blog

Description: 简介 机器学习在选定模型、目标函数之后,核心便是如何优化(目标)损失函数。而常见的优化算法中,有梯度下降、遗传算法、模拟退火等算法,其中用梯度类的优化算法通常效率更高,而使用也更为广泛。接下来,我们从梯度下降(Gradient descent)、梯度提升(Gradient Boosting)算法中了解下“梯度”优化背后的原理。 一、梯度 我们先引出梯度的定义: 梯度是一个矢量,其方向上的方向导数最大,其大小正好是此最大方向导数 简单对于二维的情况,梯度也就是曲线上某点的...

Open Graph Description: 简介 机器学习在选定模型、目标函数之后,核心便是如何优化(目标)损失函数。而常见的优化算法中,有梯度下降、遗传算法、模拟退火等算法,其中用梯度类的优化算法通常效率更高,而使用也更为广泛。接下来,我们从梯度下降(Gradient descent)、梯度提升(Gradient Boosting)算法中了解下“梯度”优化背后的原理。 一、梯度 我们先引出梯度的定义: 梯度是一个矢量,其方向上的方向...

X Description: 简介 机器学习在选定模型、目标函数之后,核心便是如何优化(目标)损失函数。而常见的优化算法中,有梯度下降、遗传算法、模拟退火等算法,其中用梯度类的优化算法通常效率更高,而使用也更为广泛。接下来,我们从梯度下降(Gradient descent)、梯度提升(Gradient Boosting)算法中了解下“梯度”优化背后的原理。 一、梯度 我们先引出梯度的定义: 梯度是一个矢量,其方向上的方向...

Opengraph URL: https://github.com/aialgorithm/Blog/issues/51

X: @github

direct link

Domain: github.com


Hey, it has json ld scripts:
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"深入机器学习的梯度优化","articleBody":"## 简介\r\n机器学习在选定模型、目标函数之后,核心便是如何优化(目标)损失函数。而常见的优化算法中,有梯度下降、遗传算法、模拟退火等算法,其中用梯度类的优化算法通常效率更高,而使用也更为广泛。接下来,我们从梯度下降(Gradient descent)、梯度提升(Gradient Boosting)算法中了解下“梯度”优化背后的原理。\r\n\r\n##   一、梯度\r\n我们先引出梯度的定义:\r\n\u003e梯度是一个矢量,其方向上的方向导数最大,其大小正好是此最大方向导数\r\n\r\n简单对于二维的情况,梯度也就是曲线上某点的切线斜率,数值就是该曲线函数的导数,如y=x^2^ ,求导dy/dx=2x\r\n![](https://upload-images.jianshu.io/upload_images/11682271-6816de6cf1b8e211.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)\r\n扩展到3维(多维),各点方向导数是无限多(一个平面),梯度也就是方向导数最大的方向,数值即对多元函数各参数求偏导数,如y=x^2^ + 3z^2^ ,求x偏导dy/dx=2x,求z偏导dy/dz=6z。\r\n![](https://upload-images.jianshu.io/upload_images/11682271-aa14889858bc7ece.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)\r\n\r\n换句话说,沿着函数(曲线)的任意各点位置取梯度相反的方向,如y=x^2^ + 3z^2^ 的负梯度-(2x, 6z),也就是多元函数下降最快的地方,越容易找到极值。这也就是梯度下降算法的基本思想。\r\n\r\n## 二、梯度下降算法\r\n\r\n### 2.1 梯度下降的基本原理\r\n梯度类的优化算法,最为常用的就是随机梯度下降,以及一些的升级版的梯度优化如“Adam”、“RMSP”等等。\r\n![](https://upload-images.jianshu.io/upload_images/11682271-5ca1785ca9e5a589.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)\r\n\r\n如下介绍梯度下降算法的基本原理:\r\n\r\n首先可以将损失函数J(w)比喻成一座山,我们的目标是到达这座山的山脚(即求解出最优模型参数w使得损失函数为最小值)\r\n![](https://upload-images.jianshu.io/upload_images/11682271-ca7495a2af01c783.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)\r\n\r\n这时,梯度下降算法可以直观理解成一个下山的方法。\r\n![](https://upload-images.jianshu.io/upload_images/11682271-2a0fec44e6cfc673.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)\r\n\r\n下山要做的无非就是“往下坡的方向走,走一步算一步”,而在损失函数这座山上,每一位置的下坡的方向也就是它的负梯度方向(直白点,也就是山各点位置的斜向下的方向)。每往下走到一个位置的时候,代入当前样本的特征数据求解当前位置的梯度,继续沿着最陡峭最易下山的位置再走一步。这样一步步地走下去,一直走到山脚(或者山沟沟)。\r\n![](https://upload-images.jianshu.io/upload_images/11682271-6f610939b072089a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)\r\n\r\n当然这样走下去,有可能我们不是走到山脚(全局最优,Global cost minimun),而是到了某一个的小山谷(局部最优,Local cost minimun),这也后面梯度下降算法的可进一步调优的地方。对应的算法步骤,直接截我之前的图:\r\n![](https://upload-images.jianshu.io/upload_images/11682271-18cb305e057781f1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n与梯度下降一起出现的还有个梯度上升,两者原理一致,主要是术语的差异。简单来说,对梯度下降目标函数取负数,求解的是局部最大值,相应需要就是梯度提升法。\r\n\r\n\r\n### 2.2 梯度下降的数学原理——泰勒展开\r\n本节会通过泰勒展开定理,\"推导\"得出梯度下降\r\n\r\n首先引出泰勒展开原理,它是种计算函数某点的近似值的方法,通过多个多项式拟合某一函数f(x)。泰勒多项式展开的项数越多,拟合的越好\r\n![](https://upload-images.jianshu.io/upload_images/11682271-0c8fac54dc3ecb6c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)\r\n\r\n- 1、回到我们的损失函数J,做个一阶的泰勒展开近似:(其中θ-θ0越小越近似)\r\n![](https://upload-images.jianshu.io/upload_images/11682271-6e30c9993d18dd87.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)\r\n- 2 其中θ−θo是微小矢量,做一下变换,θ-θ0以λ*d替代(λ为向量长度,d为单位向量),可得:\r\n![](https://upload-images.jianshu.io/upload_images/11682271-47affdbecf44208e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)\r\n- 3、计算后式的向量乘积,可得:(theta为梯度与d向量的夹角)\r\n![](https://upload-images.jianshu.io/upload_images/11682271-a36e25c09eb2c22d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)\r\n\r\n\r\n- 4、上式中,我们希望J(θ) 越小越好,而J(θo)为常量,所以我们希望后项越小越好,当cos(180)=-1可以取到最小值,意味着梯度与d单位向量的夹角为相反的,也就是需要d为负梯度方向:\r\n![](https://upload-images.jianshu.io/upload_images/11682271-2443259a907df1d2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)\r\n- 5、进一步的,将d代入式子:θ-θo = λ*d,就可以得到梯度下降公式的雏形(其中λ及1/||J'||为常数可以改写为常用的学习率α),优化后的θ也就是:\r\n![](https://upload-images.jianshu.io/upload_images/11682271-2392c229859f61f3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)\r\n\r\n\r\n\r\n \r\n\r\n\r\n\r\n\r\n\r\n\r\n## 三、梯度提升算法\r\n\r\n说到梯度提升(Gradient Boosting),要注意的是和上文谈到的梯度上升不是一个概念。\r\n![](https://upload-images.jianshu.io/upload_images/11682271-2d461da6bd41c2a8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)\r\n\r\n梯度提升是一种加法模型思想(Fm = Fm-1 + hm, 同上泰勒定理,hm应为负梯度),不像梯度下降直接利用负梯度更新模型参数,梯度提升是通过各弱学习器去学习拟合负梯度的,在进一步累加弱学习器,来实现损失函数J的负梯度方向优化。\r\n![](https://upload-images.jianshu.io/upload_images/11682271-e3a01c2a5a8bef2a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)\r\n\r\n\r\n梯度提升算法很像是一个“打高尔夫,不断补杆”的过程,基本思路是弱学习器一个接着学习上一个学习器的残差或负梯度(没学习好的内容),最终得到m个弱学习器h0..hm一起决策。(**注:对于平方损失函数, 其负梯度刚好等于残差。我们通过直接拟合负梯度可以扩展到更为复杂的损失函数。**)\r\n![](https://upload-images.jianshu.io/upload_images/11682271-decf9331b7bff611.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)\r\n\r\n举个简单例子,假如我们的目标值是【100】,当第一个弱学习器h0学习目标值100,实际输出y^只有【60】,和实际y还是有偏差的,残差值y^ - y,第二个学习器h1继续学习拟合之前的残差(或者负梯度),学习剩下的【100-60】,并实际输出【50】...依次学习到第h2个弱学习器拟合之前的残差【100-60-50】,这时比较准确地输出【-10】,达到较好的拟合结果,算法结束。整个模型的表示就是Fm = h0 + h1 + h2 =  60 + 50 - 10 =\u003e 100。如下图具体算法:\r\n![](https://upload-images.jianshu.io/upload_images/11682271-a33880332f4b865f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)\r\n### 后记\r\n在优化领域,梯度优化方法无疑是简单又极有效率的,但不可避免的是它通常依赖着有监督标签,且得到的是近似最优解。不可否认,在优化的道路上,我们还有很长的一段路要走。\r\n\r\n---\r\n\r\n\u003e参考文献:\r\nhttps://zhuanlan.zhihu.com/p/45122093\r\nhttps://zhuanlan.zhihu.com/p/82757193\r\nhttps://www.zhihu.com/question/63560633","author":{"url":"https://github.com/aialgorithm","@type":"Person","name":"aialgorithm"},"datePublished":"2022-05-16T10:36:14.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":0},"url":"https://github.com/51/Blog/issues/51"}

route-pattern/_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format)
route-controllervoltron_issues_fragments
route-actionissue_layout
fetch-noncev2:15e0abd3-5b40-15be-2c57-a69b59978ccc
current-catalog-service-hash81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114
request-idB868:309720:7A9999:AAC82E:696A7F82
html-safe-nonce74cb8858edd55388b899654419637a6b8f8b304a2949566bade5114c09d42f28
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJCODY4OjMwOTcyMDo3QTk5OTk6QUFDODJFOjY5NkE3RjgyIiwidmlzaXRvcl9pZCI6Ijc3MTU5NzExMzM0MzI1NjE1MzgiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ==
visitor-hmac3953799aad6a6cd31805089130e7f1755c0c707fbd5da196b5bdeb3031d3fefa
hovercard-subject-tagissue:1236955118
github-keyboard-shortcutsrepository,issues,copilot
google-site-verificationApib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I
octolytics-urlhttps://collector.github.com/github/collect
analytics-location///voltron/issues_fragments/issue_layout
fb:app_id1401488693436528
apple-itunes-appapp-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/aialgorithm/Blog/51/issue_layout
twitter:imagehttps://opengraph.githubassets.com/42ee79cf9b0a5d7397f7d3f80ca7010ccbe6437f5d9da3430fd03699dd443be8/aialgorithm/Blog/issues/51
twitter:cardsummary_large_image
og:imagehttps://opengraph.githubassets.com/42ee79cf9b0a5d7397f7d3f80ca7010ccbe6437f5d9da3430fd03699dd443be8/aialgorithm/Blog/issues/51
og:image:alt简介 机器学习在选定模型、目标函数之后,核心便是如何优化(目标)损失函数。而常见的优化算法中,有梯度下降、遗传算法、模拟退火等算法,其中用梯度类的优化算法通常效率更高,而使用也更为广泛。接下来,我们从梯度下降(Gradient descent)、梯度提升(Gradient Boosting)算法中了解下“梯度”优化背后的原理。 一、梯度 我们先引出梯度的定义: 梯度是一个矢量,其方向上的方向...
og:image:width1200
og:image:height600
og:site_nameGitHub
og:typeobject
og:author:usernameaialgorithm
hostnamegithub.com
expected-hostnamegithub.com
None913560fa317c3c5a71e34f9b19253c9f09d02b4b958a86c2a56f4c8541116377
turbo-cache-controlno-preview
go-importgithub.com/aialgorithm/Blog git https://github.com/aialgorithm/Blog.git
octolytics-dimension-user_id33707637
octolytics-dimension-user_loginaialgorithm
octolytics-dimension-repository_id147093233
octolytics-dimension-repository_nwoaialgorithm/Blog
octolytics-dimension-repository_publictrue
octolytics-dimension-repository_is_forkfalse
octolytics-dimension-repository_network_root_id147093233
octolytics-dimension-repository_network_root_nwoaialgorithm/Blog
turbo-body-classeslogged-out env-production page-responsive
disable-turbofalse
browser-stats-urlhttps://api.github.com/_private/browser/stats
browser-errors-urlhttps://api.github.com/_private/browser/errors
release5998c30593994bf2589055aef7b22d368a499367
ui-targetfull
theme-color#1e2327
color-schemelight dark

Links:

Skip to contenthttps://github.com/aialgorithm/Blog/issues/51#start-of-content
https://github.com/
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Faialgorithm%2FBlog%2Fissues%2F51
GitHub CopilotWrite better code with AIhttps://github.com/features/copilot
GitHub SparkBuild and deploy intelligent appshttps://github.com/features/spark
GitHub ModelsManage and compare promptshttps://github.com/features/models
MCP RegistryNewIntegrate external toolshttps://github.com/mcp
ActionsAutomate any workflowhttps://github.com/features/actions
CodespacesInstant dev environmentshttps://github.com/features/codespaces
IssuesPlan and track workhttps://github.com/features/issues
Code ReviewManage code changeshttps://github.com/features/code-review
GitHub Advanced SecurityFind and fix vulnerabilitieshttps://github.com/security/advanced-security
Code securitySecure your code as you buildhttps://github.com/security/advanced-security/code-security
Secret protectionStop leaks before they starthttps://github.com/security/advanced-security/secret-protection
Why GitHubhttps://github.com/why-github
Documentationhttps://docs.github.com
Bloghttps://github.blog
Changeloghttps://github.blog/changelog
Marketplacehttps://github.com/marketplace
View all featureshttps://github.com/features
Enterpriseshttps://github.com/enterprise
Small and medium teamshttps://github.com/team
Startupshttps://github.com/enterprise/startups
Nonprofitshttps://github.com/solutions/industry/nonprofits
App Modernizationhttps://github.com/solutions/use-case/app-modernization
DevSecOpshttps://github.com/solutions/use-case/devsecops
DevOpshttps://github.com/solutions/use-case/devops
CI/CDhttps://github.com/solutions/use-case/ci-cd
View all use caseshttps://github.com/solutions/use-case
Healthcarehttps://github.com/solutions/industry/healthcare
Financial serviceshttps://github.com/solutions/industry/financial-services
Manufacturinghttps://github.com/solutions/industry/manufacturing
Governmenthttps://github.com/solutions/industry/government
View all industrieshttps://github.com/solutions/industry
View all solutionshttps://github.com/solutions
AIhttps://github.com/resources/articles?topic=ai
Software Developmenthttps://github.com/resources/articles?topic=software-development
DevOpshttps://github.com/resources/articles?topic=devops
Securityhttps://github.com/resources/articles?topic=security
View all topicshttps://github.com/resources/articles
Customer storieshttps://github.com/customer-stories
Events & webinarshttps://github.com/resources/events
Ebooks & reportshttps://github.com/resources/whitepapers
Business insightshttps://github.com/solutions/executive-insights
GitHub Skillshttps://skills.github.com
Documentationhttps://docs.github.com
Customer supporthttps://support.github.com
Community forumhttps://github.com/orgs/community/discussions
Trust centerhttps://github.com/trust-center
Partnershttps://github.com/partners
GitHub SponsorsFund open source developershttps://github.com/sponsors
Security Labhttps://securitylab.github.com
Maintainer Communityhttps://maintainers.github.com
Acceleratorhttps://github.com/accelerator
Archive Programhttps://archiveprogram.github.com
Topicshttps://github.com/topics
Trendinghttps://github.com/trending
Collectionshttps://github.com/collections
Enterprise platformAI-powered developer platformhttps://github.com/enterprise
GitHub Advanced SecurityEnterprise-grade security featureshttps://github.com/security/advanced-security
Copilot for BusinessEnterprise-grade AI featureshttps://github.com/features/copilot/copilot-business
Premium SupportEnterprise-grade 24/7 supporthttps://github.com/premium-support
Pricinghttps://github.com/pricing
Search syntax tipshttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
documentationhttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Faialgorithm%2FBlog%2Fissues%2F51
Sign up https://github.com/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fvoltron%2Fissues_fragments%2Fissue_layout&source=header-repo&source_repo=aialgorithm%2FBlog
Reloadhttps://github.com/aialgorithm/Blog/issues/51
Reloadhttps://github.com/aialgorithm/Blog/issues/51
Reloadhttps://github.com/aialgorithm/Blog/issues/51
aialgorithm https://github.com/aialgorithm
Bloghttps://github.com/aialgorithm/Blog
Notifications https://github.com/login?return_to=%2Faialgorithm%2FBlog
Fork 259 https://github.com/login?return_to=%2Faialgorithm%2FBlog
Star 942 https://github.com/login?return_to=%2Faialgorithm%2FBlog
Code https://github.com/aialgorithm/Blog
Issues 66 https://github.com/aialgorithm/Blog/issues
Pull requests 0 https://github.com/aialgorithm/Blog/pulls
Actions https://github.com/aialgorithm/Blog/actions
Projects 0 https://github.com/aialgorithm/Blog/projects
Security Uh oh! There was an error while loading. Please reload this page. https://github.com/aialgorithm/Blog/security
Please reload this pagehttps://github.com/aialgorithm/Blog/issues/51
Insights https://github.com/aialgorithm/Blog/pulse
Code https://github.com/aialgorithm/Blog
Issues https://github.com/aialgorithm/Blog/issues
Pull requests https://github.com/aialgorithm/Blog/pulls
Actions https://github.com/aialgorithm/Blog/actions
Projects https://github.com/aialgorithm/Blog/projects
Security https://github.com/aialgorithm/Blog/security
Insights https://github.com/aialgorithm/Blog/pulse
New issuehttps://github.com/login?return_to=https://github.com/aialgorithm/Blog/issues/51
New issuehttps://github.com/login?return_to=https://github.com/aialgorithm/Blog/issues/51
深入机器学习的梯度优化https://github.com/aialgorithm/Blog/issues/51#top
https://github.com/aialgorithm
https://github.com/aialgorithm
aialgorithmhttps://github.com/aialgorithm
on May 16, 2022https://github.com/aialgorithm/Blog/issues/51#issue-1236955118
https://camo.githubusercontent.com/a166b0a3c5701dff6d07cf1b45dc8f2debd14d9de79c8b63f630fc486ee08afb/68747470733a2f2f75706c6f61642d696d616765732e6a69616e7368752e696f2f75706c6f61645f696d616765732f31313638323237312d363831366465366366316238653231312e706e673f696d6167654d6f6772322f6175746f2d6f7269656e742f7374726970253743696d61676556696577322f322f772f31323430
https://camo.githubusercontent.com/c9753bd3ae47602e4e7ec692f8c2c1a7248b626ce2dfee96b219e9add1d8d3e2/68747470733a2f2f75706c6f61642d696d616765732e6a69616e7368752e696f2f75706c6f61645f696d616765732f31313638323237312d616131343838393835386263376563652e706e673f696d6167654d6f6772322f6175746f2d6f7269656e742f7374726970253743696d61676556696577322f322f772f31323430
https://camo.githubusercontent.com/7f273409d5bc40041790154020c47e0e6199cb220fa02b50afc55eda7198ac87/68747470733a2f2f75706c6f61642d696d616765732e6a69616e7368752e696f2f75706c6f61645f696d616765732f31313638323237312d356361313738356361396535613538392e706e673f696d6167654d6f6772322f6175746f2d6f7269656e742f7374726970253743696d61676556696577322f322f772f31323430
https://camo.githubusercontent.com/b12524a3a4de8441009f5a19ab275a0c4e88d07534f58011289d2d62a6b18d1a/68747470733a2f2f75706c6f61642d696d616765732e6a69616e7368752e696f2f75706c6f61645f696d616765732f31313638323237312d636137343935613261663031633738332e706e673f696d6167654d6f6772322f6175746f2d6f7269656e742f7374726970253743696d61676556696577322f322f772f31323430
https://camo.githubusercontent.com/cb7526b4e0afe39c1e13c7dee6afc8d623c693899ce39f8d78753800ee7505e8/68747470733a2f2f75706c6f61642d696d616765732e6a69616e7368752e696f2f75706c6f61645f696d616765732f31313638323237312d326130666563343465366366633637332e706e673f696d6167654d6f6772322f6175746f2d6f7269656e742f7374726970253743696d61676556696577322f322f772f31323430
https://camo.githubusercontent.com/94eb592e3981ea6dfd8d0d8a9819b5a13cadfe7034f496578cc8b6f3422b01c2/68747470733a2f2f75706c6f61642d696d616765732e6a69616e7368752e696f2f75706c6f61645f696d616765732f31313638323237312d366636313039333962303732303839612e706e673f696d6167654d6f6772322f6175746f2d6f7269656e742f7374726970253743696d61676556696577322f322f772f31323430
https://camo.githubusercontent.com/faac31d798c8d28d6d0115126b53e3c9c3a243e4e161671b0a2b8eb34232ba84/68747470733a2f2f75706c6f61642d696d616765732e6a69616e7368752e696f2f75706c6f61645f696d616765732f31313638323237312d313863623330356530353737383166312e706e673f696d6167654d6f6772322f6175746f2d6f7269656e742f7374726970253743696d61676556696577322f322f772f31323430
https://camo.githubusercontent.com/128a99d6754241880dae57ef2dc860e96e34989e762772989eea315b79c33560/68747470733a2f2f75706c6f61642d696d616765732e6a69616e7368752e696f2f75706c6f61645f696d616765732f31313638323237312d306338666163353464633365636236632e706e673f696d6167654d6f6772322f6175746f2d6f7269656e742f7374726970253743696d61676556696577322f322f772f31323430
https://camo.githubusercontent.com/ebbb04eedb4a9402f98f3a91733d1a4076f0e98826200d5311340340605dc178/68747470733a2f2f75706c6f61642d696d616765732e6a69616e7368752e696f2f75706c6f61645f696d616765732f31313638323237312d366533306339393933643138646438372e706e673f696d6167654d6f6772322f6175746f2d6f7269656e742f7374726970253743696d61676556696577322f322f772f31323430
https://camo.githubusercontent.com/bec217b58210b63b8477497f2a2f927cdff5f1a833b500cc896e34677855547f/68747470733a2f2f75706c6f61642d696d616765732e6a69616e7368752e696f2f75706c6f61645f696d616765732f31313638323237312d343761666664626563663434323038652e706e673f696d6167654d6f6772322f6175746f2d6f7269656e742f7374726970253743696d61676556696577322f322f772f31323430
https://camo.githubusercontent.com/7508e8514162a1f99ba6e7f87b1b587d6b24c1fcbfc73d7a4d2bdc76f9a69ce8/68747470733a2f2f75706c6f61642d696d616765732e6a69616e7368752e696f2f75706c6f61645f696d616765732f31313638323237312d613336653235633039656232633232642e706e673f696d6167654d6f6772322f6175746f2d6f7269656e742f7374726970253743696d61676556696577322f322f772f31323430
https://camo.githubusercontent.com/e8fc1c40524405b47bd56fa0bd33d567d15f252d5881e3fcfffda5f2d4362efb/68747470733a2f2f75706c6f61642d696d616765732e6a69616e7368752e696f2f75706c6f61645f696d616765732f31313638323237312d323434333235396139303764663164322e706e673f696d6167654d6f6772322f6175746f2d6f7269656e742f7374726970253743696d61676556696577322f322f772f31323430
https://camo.githubusercontent.com/bfbf4f2c0853cefb3f6c5719a01920e55bf07cb3cc5b68712c10b88fb657728d/68747470733a2f2f75706c6f61642d696d616765732e6a69616e7368752e696f2f75706c6f61645f696d616765732f31313638323237312d323339326332323938353966363166332e706e673f696d6167654d6f6772322f6175746f2d6f7269656e742f7374726970253743696d61676556696577322f322f772f31323430
https://camo.githubusercontent.com/45793f58c95bf476576758867a34144e7afafdf8bdd4bb5acbfb84c394fd8990/68747470733a2f2f75706c6f61642d696d616765732e6a69616e7368752e696f2f75706c6f61645f696d616765732f31313638323237312d326434363164613662643431633261382e706e673f696d6167654d6f6772322f6175746f2d6f7269656e742f7374726970253743696d61676556696577322f322f772f31323430
https://camo.githubusercontent.com/22292e64cf12ffbb2b279f66b80dbe0c7cd51a7ebd30d51de73046807556c060/68747470733a2f2f75706c6f61642d696d616765732e6a69616e7368752e696f2f75706c6f61645f696d616765732f31313638323237312d653361303163326135613862656632612e706e673f696d6167654d6f6772322f6175746f2d6f7269656e742f7374726970253743696d61676556696577322f322f772f31323430
https://camo.githubusercontent.com/a2ddfc7384ea7dd7b9e1ddc046c9c5bd76964f765e3060d390e835b62c521ca8/68747470733a2f2f75706c6f61642d696d616765732e6a69616e7368752e696f2f75706c6f61645f696d616765732f31313638323237312d646563663933333162376266663631312e706e673f696d6167654d6f6772322f6175746f2d6f7269656e742f7374726970253743696d61676556696577322f322f772f31323430
https://camo.githubusercontent.com/8a8c0a7c70c041186bd944d359fe7734c1bdc8e7cd37081d5b71c44db982347a/68747470733a2f2f75706c6f61642d696d616765732e6a69616e7368752e696f2f75706c6f61645f696d616765732f31313638323237312d613333383830333332663462383635662e706e673f696d6167654d6f6772322f6175746f2d6f7269656e742f7374726970253743696d61676556696577322f322f772f31323430
https://zhuanlan.zhihu.com/p/45122093https://zhuanlan.zhihu.com/p/45122093
https://zhuanlan.zhihu.com/p/82757193https://zhuanlan.zhihu.com/p/82757193
https://www.zhihu.com/question/63560633https://www.zhihu.com/question/63560633
https://github.com
Termshttps://docs.github.com/site-policy/github-terms/github-terms-of-service
Privacyhttps://docs.github.com/site-policy/privacy-policies/github-privacy-statement
Securityhttps://github.com/security
Statushttps://www.githubstatus.com/
Communityhttps://github.community/
Docshttps://docs.github.com/
Contacthttps://support.github.com?tags=dotcom-footer

Viewport: width=device-width


URLs of crawlers that visited me.