騎驢找馬的謬誤

騎驢找馬是許多人找工作或是找對象的一個策略,這個策略是在沒有找到好對象或是好工作時,先找一個墊底的,等到有機會時,再離開找一個更好的。這裡我要用數學的概念來說明騎驢找馬並不是一個找對象或是找工作的好策略。

首先我要介紹三個數學上的概念,然後再對應回我們所關注的關於愛情的問題。第一個概念是全域最佳化與區域最佳化(global optimal and local optimal),第二個概念是收斂性(convergence),第三個概念叫做馬可夫鏈(Markov chain)。

求一個函數的全域極值與區域極值是微積分課程裡很重要的一個單元,課程的重點是一個可微分的連續函數若在 \(x=a\) 這一點上的一階導數等於 \(0\),那麼 \(x=a\) 這一點剛好是發生區域極值的地方。若一個連續函數是定義在一個有限區間,那麼這個區間的邊界也可能是發生區域極值的地方。最後,所有的區域極值的極大值,我們稱為全域極大值(global maximal);所有的區域極值的極小值,我們稱為全域極小值(global minimal)。

要找一個連續函數的區域極值的演算法很多,一個不是很有效率但一定會有解的方法,我們稱為攀爬法(climbing method)。這個方法說來簡單,首先我們先在定義域裡隨機找一個點當做起始點,例如 \(x=x_0\)。這時對應 \(x_0\) 這一個點的函數值 \(y_0=f(x_0)\)。然後我們在 \(x_0\) 的附近(或左或右)隨機找另外一個點 \(b\) 並且觀察 \(f(b)\) 的值,若 \(f(b)>y_0\),我們就接受 \(b\) 點為 \(x_1\),並且 \(y_1=f(x_1)\),若 \(f(b)\leq y_0\),那我們就放棄 \(b\) 點。給定一個點\(x_i\),我們可以反覆利用同樣的手法去找下一個點 \(x_{i+1}\),這時我們保證 \(f(x_i)<f(x_{i+1})\),意思是下一個結果一定比上一個結果更好。這種更好就換,沒更好就不換的方法,就是攀爬法。我們不難看出攀爬法的邏輯正巧就是騎驢找馬的概念。先驢後馬就是下一個要比前一個更好,若找到更好的,就更換,反之就沒魚蝦也好的乖乖騎著驢吧。

攀爬法可以保證在函數連續的條件下一定可以找到區域極值,但是卻無法保證找到全域極值。當一個函數有許多區域極值時,企圖用攀爬法來尋找全域極值的人可能要失望了,因為攀爬的過程中很容易因為遇到區域極值,就陷在其中無法跳脫出來。這裡,我要說明騎驢找馬的第一個謬誤,就是落入區域極值的危險。

我要說的是,騎驢找馬這個動作中隱含一個連續的概念,這個策略維持著身邊總有個伴的狀態,這時找馬這件事,是依附在騎驢這件事上面,騎著驢找到的馬,是在一個有限制式底下的集合,這個集合一定比不受限的集合來的小,因此可以找到的馬當然不一樣。我把騎著驢可以找到的馬,稱為驢子附近的馬。配合攀爬法的特性,這裡的連續與附近這兩個精神,便讓騎驢找馬的人,很容易落入一個只找到區域最佳化而不是全域最佳化的狀態。這是第一個謬誤。

在這裡要說明,攀爬法是一個找極值的方法,它的危險是有很高的機會落入區域極值當中而無法跳脫。請注意,我並沒有說攀爬法一定找不到全域極值。因此,你一定也找的到有些騎驢找馬的人,最後也找到不錯的歸宿。但你一定也舉的出更多失敗的例子,騎著驢找到好馬的機率真的不高。

第二個微積分課程裡的重要觀念叫做收斂。許多堅守騎驢找馬的人,都堅信一件事,那就是“下一個比先前的好,那麼就一定會越來越好”。我舉一個特別設計的數列,請各位觀察一下。令 \(a_0 = 1\), \(a_1=1+(1/2)\), \(a_2= 1+(1/2)+(1/2)^2\),…, \(a_n = 1+(1/2)+(1/2)^2+\cdots +(1/2)^n\)。這個數列是一個遞增的數列,\(a_n-a_{n-1}=(1/2)^n\),後面的一項一定比前面的一向來得大,只是大的不多,並且隨著項數的增加,它增加的量也越來越小。請問,\(\{a_n\}\) 這個數列會越來越大?

若我們將此數列話在數線上就不難觀察,這一個數列有一個無法突破的上界,就是 \(2\)。在數學上我們稱此數列收斂到 \(2\)。一個越來越大的數列,卻有一個無法突破的界線。我要說明的是,許多堅守騎驢找馬策略的人都誤信他們可以有一個無限寬廣的想像。事實上,因為騎驢所帶來的限制,會讓他尋找下一個對象時可以更好的程度下降,這種程度下降所帶來的結果,就是一個有上界的狀態。這是第二個謬誤。

數學上要解決落入區域極值的方法就是“跳脫”。一個著名的演算法稱為simulated annealing ,它的主要精神是放棄下一個一定要更好的限制,當下一個比原先的更好時,仍舊依循著攀爬法的原則處理。但是,當下一個比原先的不好時,simulated 的隨機概念就進來了。這時,我們會丟一個骰子,決定是否接受放棄一個比較好的狀態先往一個比較不好的狀態移動。因為有了這一個往比較不好的狀態移動的機會,這一個“跳脫”的動作就大大增加了找到全域極值的機率。Annealing 這個字說明了這是一個漫長需要”磨”的演算法,在數值計算領域,我們用高速的電腦尚且需要一定量的時間才能透過此方法求得全域最佳解。若您是騎驢找馬的信徒,為了避免落入區域極值的陷阱而採用Simulated annealing 方法,妄想能在有限的青春年華裡求得最佳解,我只帶著尊敬的眼神說「願上帝祝福你啦」。

第三個概念我要用馬可夫鏈(MarkovChain)來證明騎著驢是如何降低找到好馬的機率。馬可夫鏈是一種討論隨機過程的方法,它的一個重要假設,就是這一個時間點的狀態只與上一個時間點有關,而這一個時間點的狀態,會決定下一個時間點的狀態的機率。首先我先舉一個例子,若一位女性的身邊有兩位可以交往對象,分別是A男與B男。若這位女性與A男交往時,會有0.7的機率繼續留在A男身邊,並且有0.3的機率離開A男與B男在一起。當她與B男交往時,她有0.6的機會繼續留在B男身邊,並且有0.4的機會再回到A男的身邊。這樣,我們可以用矩陣表示法,來表示該女作選擇的機率。

\[ \left( \begin{array}{cc} 0.7 & 0.4 \cr 0.3 & 0.6 \end{array} \right)\]

若令此矩陣為M 矩陣,若該女一開始在A男的身邊,那麼下一個時間點他會在A 男身邊的機率就是0.7,在B 男身邊的機率是0.3。這個機率,可以用以下這一算式求得。

\[ \left( \begin{array}{c} 0.7 \cr 0.3 \end{array} \right) = \left( \begin{array}{cc} 0.7 & 0.4 \cr 0.3 & 0.6 \end{array}\right) \left( \begin{array}{c} 1 \cr 0 \end{array}\right)\]

這個式子的最右邊的 \((1,0)\) 代表該女一開始是與A男在一起,若換成 \((0,1)\) 則表示起始值是與B男在一起。若我們要看兩個時間點之後,該女與A男或B男在一起的機率,我們只要再作一次矩陣乘法即可。亦即

\[ \left( \begin{array}{c} 0.61 \cr 0.39 \end{array} \right) = \left( \begin{array}{cc} 0.7 & 0.4 \cr 0.3 & 0.6 \end{array}\right)^2 \left( \begin{array}{c} 1 \cr 0 \end{array}\right)\]

這時我們看到該女在兩個時間點之後繼續留在A男身邊的機率下降了,而她可能跳槽到B男身邊的機率上升了。我們想要知道時間拉長之後,該女的交往機率,我們計算把連乘的次數增加,發現無論起始的狀態為何,該女在A男與B男身邊的機率都固定下來。

\[ \left( \begin{array}{c} 0.5714 \cr 0.4286 \end{array} \right) = \left( \begin{array}{cc} 0.7 & 0.4 \cr 0.3 & 0.6 \end{array}\right)^{20} \left( \begin{array}{c} 1 \cr 0 \end{array}\right)\]

這個例子,還算是不錯的例子,至少我們可以看出,該女在A男身邊的機率,大於B男。現在,我要用這一個觀念來說明騎驢找馬的狀況。

\[ \left( \begin{array}{ccc} 0.4 & 0& 0.6 \cr 0.5 & 0.5 & 0 \cr 0.1 & 0.5 & 0.4 \end{array} \right)\]

假設現在該女的選擇增加了,其機率如上矩陣所示,最左上角的0.4 代表該女在A男身邊時願意留下來的機率,0.4正下方的0.5表示該女在A男身邊時,會跳到B男身邊的機率,0.4<0.5 正表示騎驢找馬的態度,自己身邊的是驢,外面沒有得到的比較好。第二行中間的0.5 表示,該女在B男身邊時會繼續留下來的機率,下一個0.5表示她在B男身邊時,會離開他到C男身邊的機率。第三行表示若待在C男身邊,會繼續留下來的機率是0.4,若在C男身邊而會想要回到A男身邊的機率是0.6。這種情況,我們稱舊愛還是最美。我們將這個矩陣連續乘上數回,會看到一個有趣的現象,就是該女在這三個男人中間打轉,最後留在每一個男人身邊的機率,竟然是相同的。

\[ \left( \begin{array}{ccc}0.4 & 0 & 0.6 \cr 0.5 & 0.5 & 0 \cr 0.1 & 0.5 & 0.4 \end{array} \right)^{20}=\left( \begin{array}{ccc} 0.333 & 0.333& 0.333 \cr 0.333 & 0.333 & 0.333 \cr 0.333 & 0.333 & 0.333 \end{array} \right)\] 

我想有人會反駁,上面的例子該女對這三個男人的態度其實都不是認真的,若真的身邊出現的Mr. Right ,該女就會甘心樂意的留在Mr. Right 身邊。所謂的Mr. Right 就是若該女和他在一起了,再離開他的機會是微乎其微。那我們就把Mr. Right 放進來,看看會有什麼有趣的事發生。 

\[ \left( \begin{array}{cccc}0.4 & 0.1 & 0.4 & 0.1 \cr 0.4 & 0.4 & 0.1 & 0 \cr 0.1 & 0.4 & 0.4 & 0.1 \cr 0.1 & 0.1 & 0.1 & 0.8 \end{array} \right)^{20}=\left( \begin{array}{cccc} 0.2406 & 0.2406 & 0.2406 & 0.2406 \cr 0.1984 & 0.1984 & 0.1984 & 1984 \cr 0.2279 & 0.2279 & 0.2279 & 0.2279 \cr 0.3331 & 0.3331 & 0.3331 & 0.3331 \end{array} \right)\] 

我們在左邊矩陣的最右邊加入一個Mr. Right,經過20個時間點後,我們看到右邊的矩陣已經到了一個穩定態。這個穩定的機率說明該女最後會留在Mr. Right 身邊的機會不到1/3並且隨著臨時備胎男的人數增加,留在Mr. Right 身邊的機率可以用數學證明是下降的。因此,騎驢找馬根本不是一個好的戀愛策略,他降低了你找到真愛的機率,學習直接和對的人戀愛,並且珍惜,才是上策。