learn.lianglianglee.com/专栏/程序员的数学课/24 结束语 数学底子好,学啥都快.md.html
2022-05-11 18:57:05 +08:00

759 lines
21 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<!-- saved from url=(0046)https://kaiiiz.github.io/hexo-theme-book-demo/ -->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no">
<link rel="icon" href="/static/favicon.png">
<title>24 结束语 数学底子好,学啥都快.md.html</title>
<!-- Spectre.css framework -->
<link rel="stylesheet" href="/static/index.css">
<!-- theme css & js -->
<meta name="generator" content="Hexo 4.2.0">
</head>
<body>
<div class="book-container">
<div class="book-sidebar">
<div class="book-brand">
<a href="/">
<img src="/static/favicon.png">
<span>技术文章摘抄</span>
</a>
</div>
<div class="book-menu uncollapsible">
<ul class="uncollapsible">
<li><a href="/" class="current-tab">首页</a></li>
</ul>
<ul class="uncollapsible">
<li><a href="../">上一级</a></li>
</ul>
<ul class="uncollapsible">
<li>
<a href="/专栏/程序员的数学课/00 开篇词 数学,编程能力的营养根基.md.html">00 开篇词 数学,编程能力的营养根基.md.html</a>
</li>
<li>
<a href="/专栏/程序员的数学课/01 从计数开始,程序员必知必会的数制转换法.md.html">01 从计数开始,程序员必知必会的数制转换法.md.html</a>
</li>
<li>
<a href="/专栏/程序员的数学课/02 逻辑与沟通,怎样才能讲出有逻辑的话?.md.html">02 逻辑与沟通,怎样才能讲出有逻辑的话?.md.html</a>
</li>
<li>
<a href="/专栏/程序员的数学课/03 用数学决策,如何规划好投入、转化和产出?.md.html">03 用数学决策,如何规划好投入、转化和产出?.md.html</a>
</li>
<li>
<a href="/专栏/程序员的数学课/04 万物可数学,经典公式是如何在生活中应用的?.md.html">04 万物可数学,经典公式是如何在生活中应用的?.md.html</a>
</li>
<li>
<a href="/专栏/程序员的数学课/05 求极值:如何找到复杂业务的最优解?.md.html">05 求极值:如何找到复杂业务的最优解?.md.html</a>
</li>
<li>
<a href="/专栏/程序员的数学课/06 向量及其导数:计算机如何完成对海量高维度数据计算?.md.html">06 向量及其导数:计算机如何完成对海量高维度数据计算?.md.html</a>
</li>
<li>
<a href="/专栏/程序员的数学课/07 线性回归:如何在离散点中寻找数据规律?.md.html">07 线性回归:如何在离散点中寻找数据规律?.md.html</a>
</li>
<li>
<a href="/专栏/程序员的数学课/08 加乘法则:如何计算复杂事件发生的概率?.md.html">08 加乘法则:如何计算复杂事件发生的概率?.md.html</a>
</li>
<li>
<a href="/专栏/程序员的数学课/09 似然估计:如何利用 MLE 对参数进行估计?.md.html">09 似然估计:如何利用 MLE 对参数进行估计?.md.html</a>
</li>
<li>
<a href="/专栏/程序员的数学课/10 信息熵:事件的不确定性如何计算?.md.html">10 信息熵:事件的不确定性如何计算?.md.html</a>
</li>
<li>
<a href="/专栏/程序员的数学课/11 灰度实验:如何设计灰度实验并计算实验的收益?.md.html">11 灰度实验:如何设计灰度实验并计算实验的收益?.md.html</a>
</li>
<li>
<a href="/专栏/程序员的数学课/12 统计学方法:如何证明灰度实验效果不是偶然得到的?.md.html">12 统计学方法:如何证明灰度实验效果不是偶然得到的?.md.html</a>
</li>
<li>
<a href="/专栏/程序员的数学课/13 复杂度:如何利用数学推导对程序进行优化?.md.html">13 复杂度:如何利用数学推导对程序进行优化?.md.html</a>
</li>
<li>
<a href="/专栏/程序员的数学课/14 程序的循环:如何利用数学归纳法进行程序开发?.md.html">14 程序的循环:如何利用数学归纳法进行程序开发?.md.html</a>
</li>
<li>
<a href="/专栏/程序员的数学课/15 递归:如何计算汉诺塔问题的移动步数?.md.html">15 递归:如何计算汉诺塔问题的移动步数?.md.html</a>
</li>
<li>
<a href="/专栏/程序员的数学课/16 二分法:如何利用指数爆炸优化程序?.md.html">16 二分法:如何利用指数爆炸优化程序?.md.html</a>
</li>
<li>
<a href="/专栏/程序员的数学课/17 动态规划:如何利用最优子结构解决问题?.md.html">17 动态规划:如何利用最优子结构解决问题?.md.html</a>
</li>
<li>
<a href="/专栏/程序员的数学课/18 AI 入门:利用 3 个公式搭建最简 AI 框架.md.html">18 AI 入门:利用 3 个公式搭建最简 AI 框架.md.html</a>
</li>
<li>
<a href="/专栏/程序员的数学课/19 逻辑回归:如何让计算机做出二值化决策?.md.html">19 逻辑回归:如何让计算机做出二值化决策?.md.html</a>
</li>
<li>
<a href="/专栏/程序员的数学课/20 决策树:如何对 NP 难复杂问题进行启发式求解?.md.html">20 决策树:如何对 NP 难复杂问题进行启发式求解?.md.html</a>
</li>
<li>
<a href="/专栏/程序员的数学课/21 神经网络与深度学习:计算机是如何理解图像、文本和语音的?.md.html">21 神经网络与深度学习:计算机是如何理解图像、文本和语音的?.md.html</a>
</li>
<li>
<a href="/专栏/程序员的数学课/22 面试中那些坑了无数人的算法题.md.html">22 面试中那些坑了无数人的算法题.md.html</a>
</li>
<li>
<a href="/专栏/程序员的数学课/23 站在生活的十字路口,如何用数学抉择?.md.html">23 站在生活的十字路口,如何用数学抉择?.md.html</a>
</li>
<li>
<a class="current-tab" href="/专栏/程序员的数学课/24 结束语 数学底子好,学啥都快.md.html">24 结束语 数学底子好,学啥都快.md.html</a>
</li>
</ul>
</div>
</div>
<div class="sidebar-toggle" onclick="sidebar_toggle()" onmouseover="add_inner()" onmouseleave="remove_inner()">
<div class="sidebar-toggle-inner"></div>
</div>
<script>
function add_inner() {
let inner = document.querySelector('.sidebar-toggle-inner')
inner.classList.add('show')
}
function remove_inner() {
let inner = document.querySelector('.sidebar-toggle-inner')
inner.classList.remove('show')
}
function sidebar_toggle() {
let sidebar_toggle = document.querySelector('.sidebar-toggle')
let sidebar = document.querySelector('.book-sidebar')
let content = document.querySelector('.off-canvas-content')
if (sidebar_toggle.classList.contains('extend')) { // show
sidebar_toggle.classList.remove('extend')
sidebar.classList.remove('hide')
content.classList.remove('extend')
} else { // hide
sidebar_toggle.classList.add('extend')
sidebar.classList.add('hide')
content.classList.add('extend')
}
}
function open_sidebar() {
let sidebar = document.querySelector('.book-sidebar')
let overlay = document.querySelector('.off-canvas-overlay')
sidebar.classList.add('show')
overlay.classList.add('show')
}
function hide_canvas() {
let sidebar = document.querySelector('.book-sidebar')
let overlay = document.querySelector('.off-canvas-overlay')
sidebar.classList.remove('show')
overlay.classList.remove('show')
}
</script>
<div class="off-canvas-content">
<div class="columns">
<div class="column col-12 col-lg-12">
<div class="book-navbar">
<!-- For Responsive Layout -->
<header class="navbar">
<section class="navbar-section">
<a onclick="open_sidebar()">
<i class="icon icon-menu"></i>
</a>
</section>
</header>
</div>
<div class="book-content" style="max-width: 960px; margin: 0 auto;
overflow-x: auto;
overflow-y: hidden;">
<div class="book-post">
<p id="tip" align="center"></p>
<div><h1>24 结束语 数学底子好,学啥都快</h1>
<p>学到了最后,不知道你有没有思考过这样的问题:数学究竟意味着什么?</p>
<p>在回答这个问题之前,我们先看几个跟数学有关的案例或桥段。</p>
<p><strong>美剧《危机边缘》第三季的第三集</strong></p>
<p>一个年轻男子在邮筒上放置了一支笔,紧接着发生了一系列的连锁案件。先是笔掉在地上,导致一个老人去弯腰捡拾;接着,骑车而过的路人撞倒了老人,导致一群人围观;最后,围观群众过多,让公交车司机没注意红绿灯变化,导致撞死了一个手捧鲜花的女子。原来,这个年轻男子是个智商极高的人,通过各种精准的计算,对事情有了准确预判,完成了自己的杀人计划。</p>
<p><strong>电影《决胜 21 点》</strong></p>
<p>几个数学高才生利用假期时间在赌城拉斯维加斯玩他们再熟悉不过的“21点”最终狂赢三百多万的美金。他们靠记住扑克牌的分布状况推算获胜概率并调整自己的下注策略谋求统计上收益期望最大的策略。</p>
<p><strong>综艺节目《相声有新人》</strong></p>
<p>有一对博士夫妻尝试在相声中加入数学公式元素。他们认为,人类的情感可以被公式化计算,并进一步利用这些公式创作出让人产生情感共鸣的相声。虽然他们的相声并没有让我发笑,但这的确算得上是数学与相声融合的大胆尝试。</p>
<p>生活中的我们,总是面临各种各样的选择。</p>
<ul>
<li>我现在非常饿、要吃饭,是选择去可能会排队很久的网红店,还是选择去吃快速便利的麦当劳?</li>
<li>今天有一些阴天,是保守地在书包里背着一把雨伞,还是激进点,不带伞轻装出行?</li>
<li>等公交时来了一个不太顺路的车,是选择先上车,还是继续等待着那趟更顺路的车?</li>
</ul>
<p>面对人生中的选择,你一定要尽可能避免用抛硬币的方式来决策人生。相反,你需要具备做出更合理的决策的能力。</p>
<ul>
<li>例如,你根据过往数据计算出网红店高峰排队的时间期望是 20 分钟,而麦当劳只需要 3 分钟就能完成汉堡包的出餐,那么去麦当劳吃饭也许是个更好的选择。</li>
<li>又如,你根据所在城市的历史天气状况数据计算发现,阴天条件下产生降水的概率 P(降水|阴天) 只有 0.05,那么激进一点,不带伞也许是个更好的选择。</li>
<li>再比如,你计算出不太顺路的公交车会让你多花费 10 分钟的出行时间,而“顺路车”平均 3 分钟就会来一趟,那么继续等待更顺路的车也许是个更好的选择。</li>
</ul>
<p>你有没有发现,利用收集到的数据做一些数学计算之后,往往会让你做出的决策更合理。反过来说,有了数学的武器之后,意味着人生做出的选择会更合理。</p>
<h3>解决问题的通用框架——形式化定义和最优化求解</h3>
<p>我在专栏的《05 | 求极值如何找到复杂业务的最优解》和《07 | 线性回归:如何在离散点中寻找数据规律?》中反复提到过一个解决问题的通用框架,那就是<strong>形式化定义</strong><strong>最优化求解</strong></p>
<p>当你遇到一个问题时,不妨试着用一个带参数的函数,来形式化定义这个问题;接着,通过各种各样求极值的办法,求解这个函数的最优值。</p>
<p>通过这两个步骤,你遇到的问题就能迎刃而解。</p>
<p>对于这两个步骤而言,第二步<strong>最优化求解</strong>就是求函数极大值/极小值的问题,如果你还会了梯度下降法,你就能找到绝大多数的函数的极值。</p>
<p>而问题的关键就是第一步,如何<strong>形式化定义</strong>一个问题。</p>
<h4>【形式化定义】</h4>
<p>在很多人眼中,事物是不可被计算的。例如,“我无法计算出他人的内心世界”“我无法计算出下一张扑克牌的花色是什么”“我无法在事前计算出足球比赛的结果”。然而,在数学家的眼中,数学家宁愿相信一切都是可以被计算的。也许,根据 TA 与你在微信上互动的频次、TA 每天说话提到你的次数等数据,就能计算出 TA 对你的好感度。</p>
<p>也许,可以根据已经翻出来的几张扑克牌的花色分布,就能计算出下一张扑克牌更可能的花色是什么。也许,根据两队历史交锋结果、比赛当时的主客场因素、球队主力伤病情况等因素,就能计算出主队获胜的概率。因此,只要你相信数学,你就能让更多的问题可被形式化定义。</p>
<p>学生时代,你一定听过这样的几句话,“学好数理化,走遍全天下”。在我的中学时代中,也有老师说过,“物理和化学的本质是数学”;在成为一名程序员之后,也听说过“一流的程序员靠数学”的说法。</p>
<p>那么,为什么这些不同的学科都指向了数学呢?</p>
<p>这与解决问题的通用框架有关。理工类的学科,研究的是实际日常生活中的问题。如果你是一个善于运用数学思想的人,那么你一定可以让更多的问题被<strong>形式化定义</strong>出来,再用一个数学的<strong>最优化求解</strong>算法,来找到问题的答案。</p>
<p>也就是说,一个实际的日常生活中的问题,会被你用数学的思想来解决。有了这个本事之后,在你的眼中,不论是物理问题、化学问题、通信问题,或者是编程问题,都将会变成数学问题。那么,只要你的数学能力够强、底子够好,你就可能做到学啥都快,干啥都游刃有余。</p>
<h3>专栏回顾</h3>
<p>这门专栏马上就要和大家说再见了,你还记得我们与大聪明、大迷糊、大漂亮学了哪些趣味数学吗?我们一起回顾一下吧。
<img src="assets/CgpVE1_79_yAPs3vAAEKkj94p7M782.png" alt="WechatIMG504.png" /></p>
<ul>
<li>在公瑾的算账定律中,我们用数学计算“你”与大聪明、大漂亮、大迷糊在麻将桌上的得失。</li>
<li>之后,我们又在“双十一剁手算钱”和“万有引力看人缘”的故事中,了解了数学偷藏在生活和万物中的奇妙。</li>
<li>再之后,又用转化漏洞分析法点醒了大漂亮,提升成绩的关键;还用数学,教大迷糊如何应对公务员考试中的行测题。最重要的是,让你也明白了做事高效的奥秘;</li>
</ul>
<p>之后,我们又加深了难度,一路升级打怪。</p>
<ul>
<li>白话理解“极大似然估计”“线性回归”“数学归纳法”,解决了让你学生时代头疼数年的隐讳、模糊的数学概念。</li>
<li>而后,我们又带着概率论滤镜观看足球赛,用信息熵计算出“阿根廷队 vs 葡萄牙队”的结果不确定性。</li>
<li>还帮助大迷糊计算灰度实验的收益和可靠性;用动态规划为大聪明找出最优回家路线。</li>
<li>寓教于乐,我们还在“汉诺塔游戏”和“多米诺骨牌”中通晓了“递归”和“归纳”的本质;</li>
<li>最后,又通过三个数学公式,以小见大,认识了 AI 的最简骨架。</li>
</ul>
<blockquote>
<p>你还记得它们出现在哪些课时吗?同学们,可以根据课时大纲回顾以上内容。</p>
</blockquote>
<h3>数学底子好,学啥都快</h3>
<p>可能你会发现,这门以数学为主题的专栏,总是带着你算,算概率、算得失、算方案、算金钱,甚至算婚恋,仿佛真的可以用数学预测未来,掌握命运。</p>
<p>但实际上,生活更像是《阿甘正传》所言,“就像一盒巧克力,你永远不知道下一颗是什么味道”。确实,就算是神算子,也无法用数学算出自己的命运和未来。</p>
<p>但即使你不能像大聪明一样,从小聪明到大,但你却可以脚踏实地,深耕自己的专业,创造一个未来:</p>
<ul>
<li>就像是从小都迷迷糊糊的大迷糊,小时候成绩不好,毕业了也没考上公务员,但却成了一名抢手的程序员,升职加薪;</li>
<li>也像是从小超级刻苦的大漂亮,小学时无论如何用功,成绩也不见提升,但长大了却成为优秀的前端工程师,遇到靠谱哥,收获幸福。</li>
</ul>
<p>学数学只是一个缩影,他们更是在数学中得到了探索和成长,虽然没有用数学预测出未来,却借助数学创造了一个未来。</p>
<p>最后,希望数学能够强健你的思维,丰盈你的大脑,让你有一个智慧并勇于拼搏的人生。</p>
</div>
</div>
<div>
<div style="float: left">
<a href="/专栏/程序员的数学课/23 站在生活的十字路口,如何用数学抉择?.md.html">上一页</a>
</div>
</div>
</div>
</div>
</div>
</div>
<a class="off-canvas-overlay" onclick="hide_canvas()"></a>
</div>
<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v652eace1692a40cfa3763df669d7439c1639079717194" integrity="sha512-Gi7xpJR8tSkrpF7aordPZQlW2DLtzUlZcumS8dMQjwDHEnw9I7ZLyiOj/6tZStRBGtGgN6ceN6cMH8z7etPGlw==" data-cf-beacon='{"rayId":"70997bf429973cfa","version":"2021.12.0","r":1,"token":"1f5d475227ce4f0089a7cff1ab17c0f5","si":100}' crossorigin="anonymous"></script>
</body>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-NPSEEVD756"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag('js', new Date());
gtag('config', 'G-NPSEEVD756');
var path = window.location.pathname
var cookie = getCookie("lastPath");
console.log(path)
if (path.replace("/", "") === "") {
if (cookie.replace("/", "") !== "") {
console.log(cookie)
document.getElementById("tip").innerHTML = "<a href='" + cookie + "'>跳转到上次进度</a>"
}
} else {
setCookie("lastPath", path)
}
function setCookie(cname, cvalue) {
var d = new Date();
d.setTime(d.getTime() + (180 * 24 * 60 * 60 * 1000));
var expires = "expires=" + d.toGMTString();
document.cookie = cname + "=" + cvalue + "; " + expires + ";path = /";
}
function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
for (var i = 0; i < ca.length; i++) {
var c = ca[i].trim();
if (c.indexOf(name) === 0) return c.substring(name.length, c.length);
}
return "";
}
</script>
</html>