-
第1天:線性代數篇:矩陣、向量、實戰編程
-
第2天:微積分篇:極限與導數、梯度下降、積分、實戰編程
-
第3天:概率分析篇:條件概率與全概率、貝葉斯公式、實戰專案
目錄
- 前言
- 一、極限與導數
- 1.1 極限
- 1.2 導數
- 1.2.1 導數的由來與定義
- 1.2.2 常用的導數公式
- 1.2.3 導數的特點
- 二、模型求解與梯度下降法
- 2.1 導數與微分
- 2.2 梯度下降法
- 2.3 應用案例:回歸問題求解
- 三、積分
- 3.1 不定積分
- 3.2 定積分
- 3.3 積分的重要應用:求解概率密度
- 3.3 常用的積分公式:
- 四、實戰:Python實作函式的微分與積分
- 1、安裝python專用庫sympy
- 2、代碼詳解
- 總結
前言
前段時間,博主剛給大家分享了人工智能關于《線性代數》相關應用及知識點,緊接著第二篇關于微積分篇,其實說的就是大學期間,很多小伙伴們都頭疼的高等數學里面的內容,
我記得我讀大學的時候,大一上下學期我們分別學了高等數學上冊和高等數學下冊,這兩本書的總學分還達到了我本科期間學習的所有課程的最高分——10分,總頁數也達到了近1000頁,
而每年的專升本,高等數學也成為必考的基礎知識之一,考研涉及到的很多應用數學中運用到的基礎知識也很多來自于高等數學,相信這里就可以看出高等數學對于大學教育的重要性了吧,
但對于《高等數學》這門學科來說,卻成為不少小伙伴們的噩夢,課堂上的小伙伴們再怎么極盡腦汁聽也聽不懂,導致掛科補考率出奇地高,

而高等數學如此重要,卻僅僅成為99%以上大學生學完后第一時間扔掉的書本之一,而現實情況下,大家把高等數學知識運用到作業中的也少之又少,
那很多人就好奇了,高等數學,在人工智能領域中到底有哪些用處呢?是不是人工智能領域中,用到高等數學,都是一些公式推導,理論深入等等呢?好吧,既然是分享數學,就還是拿出我嚴謹的思維和態度來,
我又翻出10多年前我的高數課本、筆記,老樣子還是附上我個人成績單吧,大家一起看看高等數學到底有什么知識需要我們在人工智能領域再學習研究,
小伙伴們看到這里,是不是又要激動了,上次99分本不想說什么,你這還來個雙90,88,我們還是不做朋友了吧!大家別激動,待會我就告訴大家這個考高分的小秘密,說不定下一個學霸就是你!
高數考高分的秘密就是培養出興趣和熱情,俗話說得好,興趣是最好的導師,有了興趣,你就成功了一半了,很多小伙伴們肯定會說:博主,你又在騙人了,高數能有什么興趣和熱情!
讓博主來幫你找找高數的興趣和熱情吧!!!
高數成績好的小伙伴在大學期間被人另眼相看外,說不定就幫你找到你的另一半(有沒有發現大學期間高數好的男同學們周圍都圍著一堆女同學問問題),
大學3年后根據成績來評選保研資格,高等數學這重要的10分學分將成為你的絕對優勢,博主就靠高數的優勢,第一年總成績穩居年級第一,三年總成績拿到年級第二,妥妥地保研成功,
我再給大家打打雞血,高等數學真要學起來,是有方法的!
很多小伙伴們學高等數學頭疼的一個重要原因就是因為還是沿用初高中數學的思想和方法來學,
初高中數學,很多都靠一些固定的公式、定理、公理來獲取解題思路和方法,而高等數學與它最大的區別就是,求解高等數學的根本在于對于一些復雜的無法套用固定公式來求解,甚至說是無解的問題,使用無限變化(取極限)的程序來實作的,
導數就是一種特殊模式的極限,是函式增量與自變數增量比的極限,
對于微積分來說,它的核心思想就是變換,就猶如古時候的智慧——“曹沖稱象”,把大象“變換”成石頭,石頭的重量就是大象的總重量,
由“特殊問題”入手,得到“一般問題”,正如卡克所說“一般化和抽象是數學之最重要的功能,正是由于一般化和抽象,數學才能如此異乎尋常地有效,”在日常生活中也一樣,要抓住事物的主要矛盾,遇事多總結、歸納,提高解決一般問題的能力,
最后,博主還是要和大家強調下,我們學人工智能,如果只是應用,不是深入理論或很深的演算法研究,根本不需要從頭到尾去學高等數學,更不用像大學一樣去考試,如果真要考試,可能你考個20分就能達到人工智能的要求了!
因為人工智能涉及到高等數學的知識點僅僅只有其中的20%左右!
所以從現在開始你需要做的就是把以前的一切歸零,跟著我繼續三天輕松學習吧!
一、極限與導數
1.1 極限
我們首先從一個簡單問題開始,來研究極限吧,
如果有一根長為1的木棍,每次從中間切段,切n次后,剩余部分長度為多少?如果n是一個非常大的數呢?這里面我相信聰明的小伙伴們能立馬想到這就是傳說中有名的兩分法,不斷的兩分一個物品/路線,最后趨近于0,
lim
?
n
→
∞
(
1
2
)
n
→
0
\lim _{n \rightarrow \infty}\left(\frac{1}{2}\right)^{n} \rightarrow 0
n→∞lim?(21?)n→0
我們來看看極限的定義:
某一個函式中的某一個變數,此變數在變大(或者變小)的永遠變化的程序中,逐漸向某一個確定的數值A不斷地逼近的程序中,此變數的變化,被人為規定為“永遠靠近而不停止”、其有一個“不斷地極為靠近A點的趨勢”稱作極限,
說白了,極限就是朝著一個目標出發,卻總是達不到,只能無限趨近,而無限趨近到的這個目標值就可以定義為其極限,下面就是指:當變數x無限趨近于某一個數值x0時,對應的函式結果,
A
=
lim
?
x
→
x
0
f
(
x
)
A=\lim _{x \rightarrow x_{0}} f(x)
A=x→x0?lim?f(x)
給大家舉兩個求極限的例子:
可以看到極限的求解也是要掌握一定的方法,如果左邊把∞ 或者右邊把0 直接帶入,那就都不容易求出結果,但是如果做些如圖中的變換,那就很容易就求出結果了,
1.2 導數
1.2.1 導數的由來與定義
我們先從一個連小學生都知道的方程(速度=路程÷時間)開始來了解導數吧,
比如說知道:路程s=t^2(即t的平方),那么t=2的時候,瞬時速度v是多少呢?
數學家的思維,就是將沒學過的問題轉化成學過的問題,
于是400年前的偉大科學家牛頓和萊布尼茨想了一個很聰明的辦法,取一個“很短”的時間段Δt,先算算t=2到t=2+Δt這個時間段內,平均速度是多少,下面就是計算平均速度的程序,
v = s t = ( 2 + Δ t ) 2 ? 2 2 ( 2 + Δ t ) ? 2 = 4 Δ t + Δ t 2 Δ t = 4 + Δ t \begin{array}{l} v=\frac{s}{t}&=\frac{(2+\Delta t)^{2}-2^{2}}{(2+\Delta t)-2} \\ &=\frac{4 \Delta t+\Delta t^{2}}{\Delta t} \\ &=4+\Delta t \end{array} v=ts??=(2+Δt)?2(2+Δt)2?22?=Δt4Δt+Δt2?=4+Δt?
當Δt越來越小, 2+Δt就越來越接近2,時間段就越來越窄,越來越接近時刻,那么平均速度就越來越接近瞬時速度,如果Δt小到了0,平均速度4+Δt就變成了瞬時速度4,
是不是完美解決了瞬時速度的問題,而這就是導數的由來,
接下來我們就來看看導數的定義:
定義:當函式y=f(x)的自變數x在一點x0上產生一個增量Δx時,函式輸出值的增量Δy與自變數增量Δx的比值在Δx趨于0時的極限a如果存在,a即為在x0處的導數,記作f’(x0) 或df(x0)/dx0,
f
′
(
x
0
)
=
f
(
x
0
+
Δ
x
)
?
f
(
x
0
)
Δ
x
=
lim
?
Δ
x
→
0
f
(
x
0
+
Δ
x
)
?
f
(
x
0
)
Δ
x
=
lim
?
Δ
x
→
0
Δ
y
Δ
x
\begin{aligned} f^{\prime}\left(x_{0}\right)=&\frac{f\left(x_{0}+\Delta x\right)-f\left(x_{0}\right)}{\Delta x} \\ = &\lim _{\Delta x \rightarrow 0} \frac{f\left(x_{0}+\Delta x\right)-f\left(x_{0}\right)}{\Delta x} \\ = &\lim _{\Delta x \rightarrow 0} \frac{\Delta y}{\Delta x} \end{aligned}
f′(x0?)===?Δxf(x0?+Δx)?f(x0?)?Δx→0lim?Δxf(x0?+Δx)?f(x0?)?Δx→0lim?ΔxΔy??
1.2.2 常用的導數公式
對于常用的導數公式,大家只要在用到的時候,查下就好了,至于他們的推導程序,感興趣的小伙伴們,可以用導數的定義去推導哈,
( C ) ′ = 0 ( C x ) ′ = C ( x u ) ′ = u x u ? 1 ( 1 x ) ′ = ? 1 x 2 ( e x ) ′ = e x ( ln ? x ) ′ = 1 x ( sin ? x ) ′ = cos ? x ( cos ? x ) ′ = ? sin ? x \begin{array}{cc} (C)^{\prime}=0 & (C x)^{\prime}=C \\ \left(x^{u}\right)^{\prime}=u x^{u-1} & \left(\frac{1}{x}\right)^{\prime}=-\frac{1}{x^{2}} \\ \left(e^{x}\right)^{\prime}=e^{x} & (\ln x)^{\prime}=\frac{1}{x} \\ (\sin x)^{\prime}=\cos x & (\cos x)^{\prime}=-\sin x \end{array} (C)′=0(xu)′=uxu?1(ex)′=ex(sinx)′=cosx?(Cx)′=C(x1?)′=?x21?(lnx)′=x1?(cosx)′=?sinx?
1.2.3 導數的特點
導數有個重要的定理,那就是:
若函式f(x)在x0處可導,且x0是函式f(x)的極值點,那么函式f(x)在x=x0的導數f’(x0) =0,
注意:若去掉“函式f(x)在x0處可導”的條件,則函式的極值點x0處不一定有f’(x0) =0,如f(x)=|x|;此外,若f’(x0) =0,則x0不一定是極值點,如f(x)=x^3在x=0處,有f’(0) =0,但x=0不是f(x)=x^3的極值點,
大家可以對照下圖,再好好理解下極大/小值、最小/最大值與導數為0的關系以及極值點的意思,
最后,大家要注意,導數在機器學習、深度學習中的應用非常廣泛,像最基礎的梯度下降法求極值、反向傳播通過鏈式求導(對復合函式,則用鏈式法則求導)來進一步調優確定引數、非線性函式泰勒展開、牛頓迭代法等等都有用到導數的概念,
二、模型求解與梯度下降法
2.1 導數與微分
小伙伴們在這里就會問了,怎么不是講微分呢?
其實博主想了很久,對于微分來說,它在人工智能領域最重要的應用就是在對資料建立數學模型后,通過梯度下降來求解損失函式的極小值,所以講梯度下降就是在給大家講微分,
有很多人也會經常混淆導數和微分,但他們兩又是息息相關的,從幾何意義來說,在某點上的導數就是曲線上該點的切線的斜率,而該點上的微分就是那個切線的一元線性方程,微分的幾何意義是用區域切線段近似代替曲線段,即非線性函式區域線性化,
所以,如果函式 y = f ( x ) y=f(x) y=f(x) 在 x 0 x_{0} x0? 處的可導,那么在 x 0 x_{0} x0? 處的導數為 f ′ ( x 0 ) f^{\prime}\left(x_{0}\right) f′(x0?), 而函 數 y = f ( x ) y=f(x) y=f(x) 在 x 0 x_{0} x0? 處的微分為 f ′ ( x 0 ) Δ x f^{\prime}\left(x_{0}\right) \Delta x f′(x0?)Δx ,兩者之間相差一個因子,即自變數 x x x 的微分 Δ x \Delta x Δx ,
小伙伴們,這下該清楚導數和微分的關系了吧,那我們就直接進入梯度下降法吧,
2.2 梯度下降法
梯度下降法其實就是函式尋找極小值的一種方法,通過向函式上當前點對應梯度 (導數) 的反方向的規定步長距離點進行迭代搜索,直到在極小點收敘,
J
=
f
(
p
)
?
搜索方法
p
i
+
1
=
p
i
?
α
?
?
p
i
f
(
p
i
)
J=f(p) \underset{\text { 搜索方法 }}{\longrightarrow} p_{i+1}=p_{i}-\alpha \frac{\partial}{\partial p_{i}} f\left(p_{i}\right)
J=f(p) 搜索方法 ??pi+1?=pi??α?pi???f(pi?)
這里
?
?
p
i
f
(
p
i
)
\frac{\partial}{\partial p_{i}} f\left(p_{i}\right)
?pi???f(pi?)指的就是偏導數的概念,偏導數和導數的差別就在于,當函式有多個自變數,如f(x,z)函式分別對x、z求的導數就是偏導數,可表示為
?
?
x
0
f
(
x
0
,
z
)
\frac{\partial}{\partial x_{0}} f\left(x_{0},z\right)
?x0???f(x0?,z),
?
?
z
0
f
(
x
,
z
0
)
\frac{\partial}{\partial z_{0}} f\left(x,z_{0}\right)
?z0???f(x,z0?),
我們來舉個最簡單的例子,就是一個凸曲線的極小值來說明,梯度下降的迭代方法,從下面兩圖可以看出,運用梯度下降法,在第9步之后,就會逐步趨近于極小值點(p=2)了,


2.3 應用案例:回歸問題求解
我們把一個現實中的買賣房產的問題,轉化成一個線性數學模型Y=aX+b(看過我第一篇的小伙伴肯定很熟悉這個方程吧),圖中的小點就是我們拿到的樣本數,分別不同房產面積對應不同的售價,
在這里,我們目標就是尋找到最合適的a和b,來讓我們建立的線性數學模型中同一個x求出的
y
′
\mathrm{y}^{\prime}
y′能夠盡量接近真實的y,
這里我們進一步定義損失函式為:
J
=
1
2
m
∑
i
=
1
m
(
y
i
′
?
y
i
)
2
J= \frac{1}{2 m} \sum_{i=1}^{m}\left(y_{i}^{\prime}-y_{i}\right)^{2}
J=2m1?∑i=1m?(yi′??yi?)2,這里的J其實就是所有誤差的總和除個平均,其實進一步想下,我們只要尋求到合適的a、b,讓J最小就可以了,
把它寫成計算機能迭代的流程就如下:
最后,我們通過不斷地迭代計算,就能讓損失函式不斷地趨近于極小值,而我們也最終得到比較好的線形模型y=ax+b,這里a趨近于5.08,b趨近于2.63,
這時候,我們就可以代入x = 1.10/百平米,求得 y ′ \mathrm{y}^{\prime} y′=8.218/十萬,約82萬,那聰明的你,就不會去投資150萬來買這套房子了吧,
所以說學習微分/導數不要怕,So Easy!!!

三、積分
積分其實簡單來說,就是導數/微分的逆運算,也就是說當你知道了函式的導函式,通過積分反求原函式,
積分被大量應用于求和,通俗的說是求曲邊三角形的面積,這巧妙的求解方法是積分特殊的性質決定的,
積分可以分為不定積分和定積分,
3.1 不定積分
定義:函式 f f f 的不定積分,是一個可導函式F且其導數等于原來的函式 f f f ,即 F ′ = f F^{\prime}=f F′=f
舉個例子:
假設原函式
f
(
x
)
=
2
x
f(x)=2x
f(x)=2x,那么我們可以得到一族可導函式
F
(
x
)
F(x)
F(x),其導數均為
2
x
2x
2x,比如:
F
(
x
)
=
x
2
;
F
(
x
)
=
x
2
+
1
;
F
(
x
)
=
x
2
+
10
F(x)=x^{2}; F(x)=x^{2}+1 ; F(x)=x^{2}+10
F(x)=x2;F(x)=x2+1;F(x)=x2+10
進一步,我們可以發現對于函式
F
(
x
)
=
x
2
+
C
F(x)=x^{2}+C
F(x)=x2+C(其中
C
C
C為任意常量),其導數均為
f
(
x
)
=
2
x
f(x)=2x
f(x)=2x,所以函式的不定積分可以理解為其對應的反導數,有無窮多個,
3.2 定積分
定義:對于一個給空的正實值函式 f ( x ) f(x) f(x), 在一個實數區間上的定積分可以理解為在坐標平面上,由曲線、直線以及軸圍成的曲邊梯形的面積值,
我們可以用公式來表示定積分,其中F(b)、F(a)分別表示原函式
f
(
x
)
f(x)
f(x)對應的不定積分
F
(
x
)
F(x)
F(x)在
x
=
b
x=b
x=b與
x
=
a
x=a
x=a時候的函式值:
∫
a
b
f
(
x
)
d
x
=
F
(
b
)
?
F
(
a
)
\int_{\mathbb{a}}^{b} f(x)dx=F(b)-F(a)
∫ab?f(x)dx=F(b)?F(a)
也可以用下圖來說明定積分,不定積分就是從a到b之間的面積之和,其中進行求和運算時,在x軸上方(藍色)的面積為正,下方(黃色)的面積為負,

3.3 積分的重要應用:求解概率密度
**定義:**連續型隨機變數的概率密度函式(在不至于混淆時可以簡稱為密度函式)是一個描述這個隨機變數的輸出值,在某個確定的取值點附近的可能性的函式,
而隨機變數的取值落在某個區域之內的概率則為概率密度函式在這個區域上的積分,當概率密度函式存在的時候,累積分布函式是概率密度函式的積分,
所以我們可以根據下圖,來表示區間
(
x
1
,
x
2
)
\left(x_{1}, x_{2}\right)
(x1?,x2?)的概率為
x
1
x_{1}
x1?-
x
2
x_{2}
x2?間的定積分:
P
(
x
1
,
x
2
)
=
∫
x
1
x
2
p
(
x
)
d
x
\left.P\left(x_{1}, x_{2}\right)=\int_{x_{1}}^{x_{2}} p(x)dx\right.
P(x1?,x2?)=∫x1?x2??p(x)dx

3.3 常用的積分公式:
∫ 0 d x = C ∫ a d x = a x + C ∫ x a d x = 1 a + 1 x a + 1 + C ∫ 1 x d x = ln ? ∣ x ∣ + C ∫ e x d x = e x + C ∫ sin ? x d x = ? cos ? x + C ∫ cos ? x d x = sin ? x + C \begin{array}{ll} \int 0 \mathrm{~d} x=C & \int a \mathrm{~d} x=a x+C \\ \int x^{a} \mathrm{~d} x=\frac{1}{a+1} x^{a+1}+C & \int \frac{1}{x} \mathrm{~d} x=\ln |x|+C \\ \int e^{x} \mathrm{~d} x=e^{x}+C \\ \int \sin x \mathrm{~d} x=-\cos x+C & \int \cos x \mathrm{~d} x=\sin x+C \end{array} ∫0 dx=C∫xa dx=a+11?xa+1+C∫ex dx=ex+C∫sinx dx=?cosx+C?∫a dx=ax+C∫x1? dx=ln∣x∣+C∫cosx dx=sinx+C?
四、實戰:Python實作函式的微分與積分
1、安裝python專用庫sympy
sympy是一個Python的科學計算庫,用一套強大的符號計算體系完成諸如多項式求值、求極限、解方程、求積分、微分方程、級數展開、矩陣運算等等計算問題,
詳見:https://www.jianshu.com/p/339c91ae9f41
其官方介紹:
https://www.sympy.org/en/index.html
其安裝代碼如下:
pip install sympy -i https://pypi.tuna.tsinghua.edu.cn/simple/
2、代碼詳解
我們通過下面兩個任務來為大家講解下如何在Jupyter Notebook中實作微積分的相關運算,
任務1: 求解 y 1 , y 2 , y 3 y_1,y_2,y_3 y1?,y2?,y3?的在 x = 0 x=0 x=0處的極限
任務2: 計算以下函式的導數,分別記為
f
1
,
f
2
,
f
3
f_1,f_2,f_3
f1?,f2?,f3?
y
1
=
4
x
;
y
2
=
4
x
3
+
3
x
2
+
2
;
y
3
=
1
x
y_1=4x ; y_2=4x^{3}+3x^{2}+2; y_3=\frac{1}{x}
y1?=4x;y2?=4x3+3x2+2;y3?=x1?
任務3: 計算
f
1
,
f
2
,
f
3
f_1,f_2,f_3
f1?,f2?,f3?的不定積分函式,并與
y
1
,
y
2
,
y
3
y_1,y_2,y_3
y1?,y2?,y3?對比
任務4:求解定積分: ∫ 0 1 2 x d x \int_{0}^{1} 2 x d x ∫01?2xdx
使用Jupyter Notebook演示如下:



全部代碼如下:
import sympy
# 首先定義x為一個符號,表示一個自變數
x = sympy.Symbol('x')
print(x)
print(type(x))
# 其次定義3個函式y1;y2;y3
y1 = 4 * x
y2 = 4 * x ** 3 + 3 * x ** 2 + 2
y3 = 1 / x
print(y1)
print(type(y1))
print(y2)
print(type(y2))
print(y3)
print(type(y3))
# 任務1:求解3個函式在x趨近于0時候到極限
# 求極限使用sympy.limit,傳入3個引數:函式運算式,變數名,變數趨近值
L1 = sympy.limit(y1, x, 0)
L2 = sympy.limit(y2, x, 0)
L3 = sympy.limit(y3, x, 0)
print(L1) # 結果為0
print(L2) # 結果為2
print(L3) # 結果為無窮大
# 任務2:求解3個函式的導數f1;f2;f3
# 求導使用sympy.diff函式,傳入2個引數:函式運算式和變數名
f1 = sympy.diff(y1, x)
f2 = sympy.diff(y2, x)
f3 = sympy.diff(y3, x)
print(f1) # 結果為4
print(f2) # 結果為12*x**2 + 6*x
print(f3) # 結果為-1/x**2
# 任務3:求解3個f1;f2;f3的不定積分函式F1;F2;F3
# 求不定積分使用sympy.integrate函式,傳入2個引數:函式運算式和變數名
# 注意這里求解結果,省掉了常量C
F1 = sympy.integrate(f1, x)
F2 = sympy.integrate(f2, x)
F3 = sympy.integrate(f3, x)
print(F1) # 結果為4*x 與 y1 一致
print(F2) # 結果為4*x**3 + 3*x**2 與 y2 相差常量 2
print(F3) # 結果為1/x 與 y3 一致
# 求解函式f4 = 2 * x 在0-1中的定積分 F4
# 使用sympy.integrate函式求定積分,傳入函式運算式和積分變數、積分下限、上限
f4 = 2 * x
F4 = sympy.integrate(f4, (x, 0, 1))
print(F4) # 結果為1,與我們口算結果一致(先求不定積分為F(x)= x^2+C,然后計算F(1)-F(0)=1)
總結
好啦,到這里就結束關于人工智能必學數學基礎第二天微積分篇了,相信小伙伴們從極限與導數、微分與梯度下降、積分及其相關應用都有了一定的了解,并且也通過實戰編程體會到了Python計算機編程語言對高等數學的強大計算能力了,
下一篇,我們會繼續用淺顯易懂、實戰編程的方式為大家繼續講解關于人工智能必學數學基礎——第三天概率分析篇,歡迎大家繼續支持我 關注、收藏,點贊,一鍵三連,
另外如果有任何問題,可以隨時評論區留言或者私信我,
本文只供大家學習相關知識使用,不以任何商業盈利為目的,轉載或分享請注明相關來源,如涉及到相關侵權,請聯系我洗掉,
歡迎志同道合者互相交流學習,可以加我微信號:Zhihua_Steven,或者掃以下二維碼關注我的微信公眾號,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/287383.html
標籤:其他
下一篇:成像代碼初始化部分
