原文:TowardsDataScience Blog
協(xié)議:CC BY-NC-SA 4.0
原文:https://towardsdatascience.com/airflow-schedule-interval-101-bbdda31cc463?source=collection_archive---------2-----------------------
氣流調(diào)度間隔可能是一個(gè)很難理解概念,即使對(duì)于從事氣流工作的開(kāi)發(fā)人員來(lái)說(shuō)也很難理解。StackOverflow 上偶爾會(huì)出現(xiàn)一個(gè)令人困惑的問(wèn)題:“為什么我的 DAG 沒(méi)有按預(yù)期運(yùn)行?”。這個(gè)問(wèn)題通常表明氣流調(diào)度間隔中的誤解。在本文中,我們將討論如何設(shè)置氣流調(diào)度間隔,調(diào)度氣流 Dag 的預(yù)期結(jié)果,以及如何通過(guò)示例調(diào)試氣流調(diào)度間隔問(wèn)題。
來(lái)源:阿倫視覺(jué)來(lái)自 Unsplash
首先,氣流不是流式解決方案。人們通常把它作為 ETL 工具或 cron 的替代品。由于 Airflow 有自己的調(diào)度程序,并且它采用 cron 的調(diào)度時(shí)間間隔語(yǔ)法,因此 Airflow 調(diào)度程序中最小的數(shù)據(jù)和時(shí)間間隔是分鐘。在調(diào)度程序內(nèi)部,唯一持續(xù)運(yùn)行的是調(diào)度程序本身。
然而,作為一個(gè)非流式解決方案,以避免錘你的系統(tǒng)資源,氣流不會(huì)看,并觸發(fā)你的 Dag 的所有時(shí)間。它以一定的時(shí)間間隔安排監(jiān)控,這是一個(gè)名為的可配置設(shè)置,建議您提供一個(gè)大于 60 秒的數(shù)字,以避免生產(chǎn)中出現(xiàn)一些意外結(jié)果。原因是 Airflow 仍然需要一個(gè)后端數(shù)據(jù)庫(kù)來(lái)跟蹤所有的進(jìn)程,以防崩潰。設(shè)置更少的心跳秒數(shù)意味著 Airflow scheduler 必須更頻繁地檢查以查看是否需要觸發(fā)任何新任務(wù),這會(huì)給 Airflow scheduler 及其后端數(shù)據(jù)庫(kù)帶來(lái)更大的壓力。
最后,氣流調(diào)度器遵循心跳間隔,并遍歷所有 DAG,計(jì)算它們的下一個(gè)調(diào)度時(shí)間,并與掛鐘時(shí)間進(jìn)行比較,以檢查是否應(yīng)該觸發(fā)給定的 DAG。
每個(gè) DAG 都有自己的時(shí)間表, 就是 DAG 應(yīng)該被包含在氣流調(diào)度程序中的日期。它還有助于開(kāi)發(fā)人員在 DAG 的生產(chǎn)日期之前發(fā)布它。你可以在氣流 1.8 之前更動(dòng)態(tài)地設(shè)置 。但是,建議您設(shè)置一個(gè)固定的日期,更多詳細(xì)信息可參考“動(dòng)態(tài) start_date 上的寬松調(diào)度程序”。
氣流基礎(chǔ)設(shè)施最初僅從 UTC 開(kāi)始。盡管您現(xiàn)在可以將 Airflow 配置為在您的本地時(shí)間運(yùn)行,但大多數(shù)部署仍然采用 UTC。在 UTC 下設(shè)置氣流使跨越多個(gè)時(shí)區(qū)的業(yè)務(wù)變得容易,并使您在夏令時(shí)等偶然事件中的生活更加輕松。您設(shè)置的計(jì)劃間隔將與您的氣流基礎(chǔ)設(shè)施設(shè)置相同。
您可能熟悉定義 DAG 的語(yǔ)法,并且通常在 DAG 類的下實(shí)現(xiàn) 和 。
氣流調(diào)度器部分提供了關(guān)于您可以提供什么值的更多詳細(xì)信息。當(dāng)然,你需要一個(gè) crontab 來(lái)處理。如果你發(fā)現(xiàn)自己迷失在 crontab 的定義中,嘗試使用 crontab guru ,它會(huì)解釋你放在那里的內(nèi)容。氣流也給你一些用戶友好的名字,如或。我發(fā)現(xiàn)這些名字不如 crontab 簡(jiǎn)潔明了。它也僅限于幾個(gè)時(shí)間間隔,底層實(shí)現(xiàn)仍然是 crontab,因此您甚至可能想要學(xué)習(xí) crontab 并接受它。此外,如果你只是想觸發(fā)你的 DAG,使用手動(dòng)。
作為調(diào)度程序,日期和時(shí)間是非常必要的組件。在《氣流》中,有兩個(gè)日期你需要付出額外的努力去消化: 和。注意與您在之前的 DAG 中定義的日期不同。
- execution_date 是您期望 DAG 被觸發(fā)的 start 日期和時(shí)間。
- start_date 是 DAG 被觸發(fā)的日期和時(shí)間,這個(gè)時(shí)間通常是指掛鐘。
一個(gè)常見(jiàn)的問(wèn)題是,“為什么 execution_date 不同于 start_date?”為了得到這個(gè)問(wèn)題的答案,讓我們看看一個(gè) DAG 的執(zhí)行情況,并使用、、,這有助于我們更好地理解氣流計(jì)劃間隔。請(qǐng)參考以下代碼作為示例。
調(diào)度程序 101 DAG
意思是每天凌晨?jī)牲c(diǎn)氣流會(huì)開(kāi)始新的工作。我們可以讓具有此間隔的 DAG 運(yùn)行多天。如果你點(diǎn)擊 → ,你會(huì)看到執(zhí)行日期和開(kāi)始日期。
我在 04–10 00:05:21(UTC)啟動(dòng)了這個(gè)新的 DAG,任何新的氣流 DAG 通常首先會(huì)進(jìn)行回填,這是默認(rèn)啟用的。正如您在下面的快照中所看到的, execution_date 按照預(yù)期完美地按天遞增,時(shí)間也是預(yù)期的。另一方面, start_date 是氣流調(diào)度程序開(kāi)始任務(wù)的時(shí)間。
任務(wù)實(shí)例示例(作者圖片)
在回填了所有之前的執(zhí)行之后,您可能會(huì)注意到 04–09 不在這里,但是現(xiàn)在已經(jīng)是 04–10 掛鐘了。這里出了什么問(wèn)題?
答案是:沒(méi)什么問(wèn)題。
來(lái)源:托尼·巴貝爾來(lái)自 https://gph.is/2jqoiRI
首先,Airflow 是用 ETL 思維構(gòu)建的,這通常是一個(gè) 24 小時(shí)運(yùn)行的批處理??紤]一個(gè) ETL 作業(yè),在 24 小時(shí)的窗口內(nèi),只有在 24 小時(shí)結(jié)束后才觸發(fā)作業(yè)。同樣的規(guī)則也適用于此,我們沒(méi)有看到 04–09 上的 execution_date 是因?yàn)?24 小時(shí)窗口尚未關(guān)閉。從 **execution_date,**我們知道最后一次成功運(yùn)行是在 04–08t 02:00:00(記住 execution_date 這里是 24 小時(shí)窗口的開(kāi)始時(shí)間),它結(jié)束于 04–09t 02:00:00(不含)。那么,04-09 運(yùn)行的 24 小時(shí)窗口是什么呢?就是 04–09t 02:00:00 到 04–10t 02:00:00,還沒(méi)到。
執(zhí)行數(shù)據(jù)和開(kāi)始日期的關(guān)系(圖片由作者提供)
氣流調(diào)度程序何時(shí)運(yùn)行 04–09 執(zhí)行?它會(huì)一直等到 04–10 02:00:00(掛鐘)。一旦 04–09 的執(zhí)行被觸發(fā),您將看到 execution_date 為 04–09t 02:00:00,而 start_date 將類似于 04–10t 02:01:15(這隨著 Airflow 決定何時(shí)觸發(fā)任務(wù)而變化,我們將在下一節(jié)中介紹更多)。
鑒于上述背景,你很容易明白為什么的執(zhí)行日期與的開(kāi)始日期不同。理解執(zhí)行日期和開(kāi)始日期之間的區(qū)別將會(huì)非常有幫助,當(dāng)你嘗試基于執(zhí)行日期應(yīng)用你的代碼并使用類似的宏時(shí)
另一種思考方式是:執(zhí)行日期將接近前一個(gè)**開(kāi)始日期。我們用一個(gè)更復(fù)雜的例子: ,這個(gè) crontab 的意思是周四周五周六 02:00 運(yùn)行。
下面是掛鐘或開(kāi)始日期的日歷,紅色文本是預(yù)計(jì)的執(zhí)行日期。如果您有這樣的計(jì)劃間隔,那么對(duì)于氣流會(huì)在 04–09 觸發(fā) 04–04DAG 執(zhí)行,您應(yīng)該不會(huì)感到驚訝。
時(shí)間間隔示例(圖片由作者提供)
從上面的例子中,雖然我們發(fā)現(xiàn)日期不同,但時(shí)間略有不同。例如,對(duì)于每日間隔,執(zhí)行日期為 04–09t 02:00:00,開(kāi)始日期為 04–10t 02:01:15。氣流對(duì)那 1.25 分鐘的延遲有什么作用?
這類似于一個(gè)會(huì)議場(chǎng)景。你可能不會(huì)按照日歷上的時(shí)間開(kāi)始會(huì)議。比如,你有一個(gè)每周一上午 10:00:00 的虛擬會(huì)議邀請(qǐng)( scheduler_interval )。在本周一上午 10:00:00(execution _ date),您從日歷提醒中收到加入會(huì)議的通知,然后您單擊該會(huì)議鏈接并開(kāi)始您的虛擬會(huì)議。當(dāng)您進(jìn)入會(huì)場(chǎng),會(huì)議開(kāi)始時(shí),時(shí)間是上午 10:01:15(start _ date)。
來(lái)源:優(yōu) X 創(chuàng)投來(lái)自 Unsplash
您可能已經(jīng)注意到了 execution_date 和 start_date 之間的小延遲。理想情況下,它們應(yīng)該是相同的,但現(xiàn)實(shí)并非如此。問(wèn)題是為什么氣流不會(huì)按時(shí)觸發(fā) DAG 并延遲其實(shí)際運(yùn)行?正如我們之前討論的,氣流調(diào)度器不會(huì)一直監(jiān)控 Dag。調(diào)度程序等待其下一個(gè)心跳來(lái)觸發(fā)新的 Dag,這一過(guò)程會(huì)導(dǎo)致延遲。此外,即使調(diào)度程序準(zhǔn)備在同一時(shí)間觸發(fā),您也需要考慮代碼執(zhí)行和數(shù)據(jù)庫(kù)更新時(shí)間。以上原因都會(huì)造成調(diào)度的短暫延遲。
我希望這篇文章可以揭開(kāi)氣流調(diào)度間隔是如何工作的。氣流是一個(gè)內(nèi)部復(fù)雜的系統(tǒng),但對(duì)用戶來(lái)說(shuō)很簡(jiǎn)單。按照最初的 ETL 思維方式,理解氣流調(diào)度器如何處理時(shí)間間隔可能需要一些時(shí)間。一旦您更好地理解了氣流調(diào)度間隔,創(chuàng)建具有期望間隔的 DAG 應(yīng)該是一個(gè)無(wú)障礙的過(guò)程。
希望這個(gè)故事對(duì)你有幫助。本文是我的工程&數(shù)據(jù)科學(xué)系列的部分,目前包括以下內(nèi)容:
趙承志
View list47 stories
你也可以 訂閱我的新文章 或者成為 推薦媒介會(huì)員 可以無(wú)限制訪問(wèn)媒介上的所有故事。
如果有問(wèn)題/評(píng)論,請(qǐng)不要猶豫,寫(xiě)下這個(gè)故事的評(píng)論或者通過(guò) Linkedin 或 Twitter 直接聯(lián)系我。
原文:https://towardsdatascience.com/airflow-sharing-data-between-tasks-7bbaa27eeb1?source=collection_archive---------6-----------------------
作者圖片
本文假設(shè)你至少對(duì)什么是氣流及其工作原理有一個(gè)基本的了解。
如果你在網(wǎng)上尋找氣流教程,大多數(shù)都會(huì)給你很好的介紹什么是氣流。他們將從概念上談?wù)?ETL,DAG 是什么,構(gòu)建第一個(gè) DAG 并向您展示如何執(zhí)行它。
經(jīng)常被忽略的是這些任務(wù)應(yīng)該如何交換數(shù)據(jù)。
在構(gòu)建任務(wù)時(shí)要記住的一點(diǎn)是,任務(wù)必須是冪等的。簡(jiǎn)化一下我們的例子,這意味著如果使用相似的輸入?yún)?shù)執(zhí)行成功,那么無(wú)論您調(diào)用它們多少次,它們都會(huì)產(chǎn)生相同的結(jié)果。當(dāng)與任務(wù)輸入/輸出相結(jié)合時(shí),這可能并不總是顯而易見(jiàn)的。
當(dāng)考慮數(shù)據(jù)交換時(shí),我們可以區(qū)分以下任務(wù):
- 根本不需要共享數(shù)據(jù)
- 只分享一小塊信息
- 運(yùn)算符本身存儲(chǔ)作為其執(zhí)行結(jié)果的數(shù)據(jù)
- 可以以存儲(chǔ)結(jié)果的方式編寫(xiě)的運(yùn)算符
- 使用氣流掛鉤保存或讀取結(jié)果的自定義操作員
不需要數(shù)據(jù)共享
這種任務(wù)關(guān)系的簡(jiǎn)單例子是在第一個(gè)任務(wù)中在數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)表,并在下一個(gè)任務(wù)中填充該表。
這里最重要的是執(zhí)行順序。我們需要確保表存在,以便我們可以寫(xiě)入它。在我們的例子中,我們只需要確保第一個(gè)任務(wù)在第二個(gè)任務(wù)的上游,我們就可以開(kāi)始了:
或者用我最喜歡的語(yǔ)法:
共享小塊數(shù)據(jù)
在這里,達(dá)格的 XComs 開(kāi)始發(fā)揮作用。它們易于使用,并允許在運(yùn)行 DAG 的任何任務(wù)之間共享數(shù)據(jù)。它們被永久地保存在 Airflow 的元數(shù)據(jù)數(shù)據(jù)庫(kù)中,但是我考慮在單個(gè) DAG 之外使用它們作為反模式。
我聽(tīng)說(shuō)過(guò)人們使用 XCom 在任務(wù)間共享大數(shù)據(jù)集的情況,這肯定是可能的,但由于一些原因應(yīng)該避免。
首先,它破壞了元數(shù)據(jù)數(shù)據(jù)庫(kù),打破了氣流是什么的概念——一個(gè)應(yīng)該最低限度地參與執(zhí)行和數(shù)據(jù)存儲(chǔ)的編排器。
第二,不是所有的東西都可以儲(chǔ)存?;旧?#xff0c;XCom 數(shù)據(jù)是泡菜,泡菜也有其局限性。
此外,有時(shí) XComs 可能包含敏感數(shù)據(jù),在決定將其存儲(chǔ)在 Airflow 的數(shù)據(jù)庫(kù)中之前,您應(yīng)該三思而行。
應(yīng)該記住的是,如果任務(wù)返回結(jié)果,那么這些結(jié)果將可用于下一個(gè)任務(wù)的“拉取”。不幸的是,您知道它們是否返回結(jié)果的唯一方法是深入研究 Operator 的源代碼(我強(qiáng)烈推薦這種方法,因?yàn)樗鼘O大地提高您對(duì)氣流如何工作的理解)。
我不知道使用 XCom 共享的數(shù)據(jù)的最大大小應(yīng)該是多少,但是我想說(shuō),如果它能加速 DAGs 的開(kāi)發(fā),那么幾 MB 是可以的?;蛘邠Q句話說(shuō),如果你的任務(wù)的結(jié)果沒(méi)有內(nèi)置的結(jié)果“存儲(chǔ)”,你會(huì)覺(jué)得懶惰🙂要編寫(xiě)單獨(dú)的操作符,您可以考慮將其推送到 XCom。
具有“本地”結(jié)果存儲(chǔ)的操作員
很容易知道 operator 是否會(huì)存儲(chǔ)它的執(zhí)行結(jié)果,因?yàn)樗莻鬟f給 operator 類的參數(shù)之一。這里的示例是“BigQueryExecuteQueryOperator ”,其中查詢輸出被保存到另一個(gè)表中:
為了使用結(jié)果,流水線中的下一個(gè)任務(wù)必須到達(dá) TABLE_OUT。
可以被“強(qiáng)制”存儲(chǔ)數(shù)據(jù)的操作員
假設(shè)我們的操作符沒(méi)有等效的“destination_dataset_table”參數(shù)。
當(dāng)然,您可以通過(guò)繼承“BigQueryExecuteQueryOperator”來(lái)編寫(xiě)自己的操作符,但有時(shí)更簡(jiǎn)單的選擇是編寫(xiě)您的查詢,以便將結(jié)果存儲(chǔ)在某個(gè)地方。類似于:
自定義操作員讀/寫(xiě)
如果你運(yùn)氣不好,剩下的就是使用氣流的鉤子來(lái)完成這項(xiàng)工作。該選項(xiàng)既可用于寫(xiě)入任務(wù)的結(jié)果數(shù)據(jù),也可用于在下一個(gè)必須使用它的任務(wù)中讀取數(shù)據(jù)。是的,這意味著您必須編寫(xiě)一個(gè)自定義任務(wù),例如如下所示:
并使用例如“PythonOperator”來(lái)執(zhí)行它:
我希望這些簡(jiǎn)單的技巧能幫助你寫(xiě)出更可靠的任務(wù)。
旁注:如果你正在尋找在任務(wù)間傳遞數(shù)據(jù)時(shí)更友好的工具,可以看看與 Airflow 有很多相似之處的 impfect . io,并嘗試修復(fù) Airflow 的錯(cuò)誤。請(qǐng)記住,使用它并不是完全免費(fèi)的。
原文:https://towardsdatascience.com/airflow-state-101-2be3846d4634?source=collection_archive---------15-----------------------
(圖片由 Unsplash 上的 Zbynek Burival 拍攝)
在 Airflow 中,為了描述等待執(zhí)行后續(xù)步驟的 DAG 或任務(wù)的狀態(tài),我們定義了 State 來(lái)共享有關(guān)管道進(jìn)度的信息。如果沒(méi)有狀態(tài),任何 DAG 或任務(wù)的執(zhí)行都會(huì)變成黑盒,您可能需要?jiǎng)?chuàng)建額外的外部標(biāo)志或資源來(lái)檢查狀態(tài),以幫助確定作業(yè)是完成還是失敗。幸運(yùn)的是,Airflow 提供了狀態(tài)機(jī)制,并將最近記錄的每個(gè)狀態(tài)存儲(chǔ)在其后端數(shù)據(jù)庫(kù)中。這種方式不僅易于在 Airflow UI 或 DB 中查看任何作業(yè)的狀態(tài),而且它還是一個(gè)持久層,有助于在遇到故障時(shí)重新運(yùn)行或回填。
在本文中,我們將討論什么是氣流狀態(tài),這些狀態(tài)有哪些類型,如何使用氣流狀態(tài)進(jìn)行測(cè)試和調(diào)試??赡苡型獠糠?wù),氣流也可能跟蹤這些狀態(tài),但這些狀態(tài)不在我們討論的范圍內(nèi)。
現(xiàn)實(shí)生活中狀態(tài)的一個(gè)很好的例子就像交通燈。你會(huì)有三種狀態(tài):紅色、黃色和綠色。紅燈禁止任何車(chē)輛通行,而綠燈允許車(chē)輛通行。
走紅綠燈(Gif By SPAR
氣流狀態(tài)的最基本用法是指定當(dāng)前狀態(tài),并指定氣流調(diào)度程序來(lái)決定未來(lái)的動(dòng)作。雖然氣流有更多的狀態(tài),類似于紅綠燈,但也有一些共同的特征。
- 沒(méi)有雙重狀態(tài)。在氣流中,狀態(tài)是單個(gè)值。不允許雙重狀態(tài)。這樣,一個(gè)同時(shí)有“Failed”和“UP_FOR_RETRY”的狀態(tài)在這里就沒(méi)有太大意義了。
- 狀態(tài)是靜態(tài)的,或者是給定時(shí)刻的快照。Airflow 將狀態(tài)保存在其后端數(shù)據(jù)庫(kù)中,并且狀態(tài)的更新不是一個(gè)連續(xù)的過(guò)程。由于 Airflow 調(diào)度程序的心跳間隔,您可能會(huì)遇到數(shù)據(jù)庫(kù)中的狀態(tài)更新滯后,調(diào)度程序停止運(yùn)行的罕見(jiàn)情況。
- 狀態(tài)有一個(gè)定義的生命周期。氣流庫(kù)中有詳細(xì)的生命周期圖。狀態(tài)必須遵循生命周期的流程,除了重試的情況,狀態(tài)通常不能后退。
對(duì)于當(dāng)前版本的氣流 1.10.11,氣流中的狀態(tài)有兩個(gè)主要類別:任務(wù)和運(yùn)行。
- Dagrun:成功,正在運(yùn)行,失敗;
- 任務(wù):成功、正在運(yùn)行、失敗、上游失敗、已跳過(guò)、啟動(dòng)重試、啟動(dòng)重新計(jì)劃、排隊(duì)、無(wú)、已計(jì)劃。
氣流任務(wù)等級(jí)狀態(tài)(作者供圖)
DAG 是任務(wù)的集合;DAG 的狀態(tài)就像你家里的主電源開(kāi)關(guān)。如果它失敗了,即使您讓它的任務(wù)繼續(xù)運(yùn)行,氣流調(diào)度程序也會(huì)忽略它,因?yàn)?dagrun 的狀態(tài)是 failed。
DAG 級(jí)別的狀態(tài)就像主電源開(kāi)關(guān)(Ariel Victor 的黑白動(dòng)畫(huà) GIF)
任務(wù)級(jí)別的狀態(tài)處于更細(xì)粒度的級(jí)別,因?yàn)槿蝿?wù)之間可能存在依賴關(guān)系。一些狀態(tài)可能有多個(gè)連續(xù)的狀態(tài),這就是為什么在任務(wù)級(jí)別有更多的狀態(tài)來(lái)處理更復(fù)雜的情況。例如,upstream_failed 表示當(dāng)前任務(wù)由于上游失敗而無(wú)法執(zhí)行。
查看狀態(tài)的另一種方式是查看狀態(tài)是已完成還是未完成。完成狀態(tài)意味著氣流調(diào)度程序?qū)⒉辉俦O(jiān)控它們,因此它不在調(diào)度和監(jiān)控的范圍內(nèi)。另一方面,對(duì)于未完成狀態(tài),那些是待定狀態(tài),對(duì)于當(dāng)前未完成狀態(tài)將有即將到來(lái)的改變,但是最終目標(biāo)是達(dá)到完成狀態(tài)。
至于現(xiàn)在,已完成的狀態(tài)是 SUCCESS,FAILED,UPSTREAM_FAILED(注意這一個(gè)在已完成狀態(tài)列表中沒(méi)有提到),和 SKIPPED,其余都是未完成狀態(tài)。
讓我們更詳細(xì)地檢查每個(gè)狀態(tài)并進(jìn)行討論。
成功狀態(tài)
成功 (在 dagrun 和任務(wù)級(jí)別|完成狀態(tài)下):成功狀態(tài)表示氣流在運(yùn)行作業(yè)時(shí)沒(méi)有遇到任何錯(cuò)誤,并且成功完成。在氣流中,dagrun 有一個(gè)深綠色的圓圈,任務(wù)等級(jí)有一個(gè)深綠色的方塊。即使對(duì)于一個(gè)虛擬任務(wù),因?yàn)闆](méi)有任何錯(cuò)誤,雖然氣流在這里沒(méi)有執(zhí)行任何有意義的事情,但它仍然會(huì)將虛擬任務(wù)視為成功,因?yàn)槲覀兏嬖V氣流不要運(yùn)行任何東西,氣流應(yīng)該會(huì)將成功返回給我們。
運(yùn)行狀態(tài)
正在運(yùn)行 (在 dagrun 和任務(wù)級(jí)別|未完成狀態(tài)狀態(tài)中):正在運(yùn)行狀態(tài)確定氣流調(diào)度器已經(jīng)將那些 dag 或任務(wù)分配給執(zhí)行器。它正在監(jiān)視(通過(guò)心跳)它的狀態(tài),執(zhí)行器正在運(yùn)行實(shí)際的作業(yè)。在氣流中,dagrun 有一個(gè)淺綠色的圓圈,任務(wù)等級(jí)有一個(gè)淺綠色的方塊。由于運(yùn)行是一種未完成狀態(tài),因此在任何給定時(shí)間,您的 dag 或任務(wù)都可能失敗,然后會(huì)導(dǎo)致重試或失敗狀態(tài)。此外,在任務(wù)級(jí)別,當(dāng)給定的任務(wù)仍在運(yùn)行時(shí),如果您重新運(yùn)行任務(wù)本身(通過(guò)清除其狀態(tài)),有時(shí)氣流調(diào)度程序會(huì)進(jìn)入關(guān)閉狀態(tài),這是關(guān)閉和終止任務(wù)的外部請(qǐng)求。
失效狀態(tài)
失敗 (在 dagrun 和任務(wù)級(jí)|完成狀態(tài)下):失敗狀態(tài)向用戶指出在執(zhí)行期間出現(xiàn)了問(wèn)題,氣流無(wú)法調(diào)度執(zhí)行到底。在氣流中,dagrun 有一個(gè)紅圈,任務(wù)等級(jí)有一個(gè)紅方塊。由于氣流中沒(méi)有雙重狀態(tài),對(duì)于部分成功,dagrun 仍然會(huì)標(biāo)記為失敗,以便用戶進(jìn)一步探索。另一方面,在任務(wù)層,Airflow 標(biāo)記了確切的失敗任務(wù),并且該任務(wù)的所有下游都標(biāo)記為 UPSTREAM_FAILED(如果 trigger_rule 默認(rèn)為 all_success ),這很好地幫助用戶立即找到失敗的最初原因。
上游 _ 失敗狀態(tài)
UPSTREAM_FAILED *(僅限任務(wù)級(jí)|完成狀態(tài)):*上游失敗狀態(tài)是指上游發(fā)生了一些錯(cuò)誤的狀態(tài)。您也可以有多個(gè)上游,在這種情況下,您可以考慮 trigger_rule ,它默認(rèn)為 all_success 。在這種情況下,如果任何上游任務(wù)失敗,就會(huì)得到 UPSTREAM_FAILED。然而,如果你不想有這種行為,氣流提供了更多的選項(xiàng),例如,你可以做 *one_success,*如果只有一個(gè)上游任務(wù)是成功的,它將繼續(xù)當(dāng)前的任務(wù)。
跳過(guò)狀態(tài)
跳過(guò) *(僅限任務(wù)級(jí)|完成狀態(tài)):*跳過(guò)狀態(tài)是已經(jīng)被忽略執(zhí)行的任務(wù),調(diào)度器繞過(guò)該任務(wù)繼續(xù)執(zhí)行。在分支操作中,跳過(guò)一個(gè)任務(wù)通常是一種預(yù)期的行為,您有多個(gè)條件可以選擇,一旦決定了其中的一些,未選擇的將被標(biāo)記為跳過(guò)。您還可以在不使用分支運(yùn)算符的情況下明確標(biāo)記跳過(guò)的任務(wù),這涉及手動(dòng)設(shè)置氣流狀態(tài)。每當(dāng)您跳過(guò)一個(gè)任務(wù)時(shí),它的所有下游任務(wù)也會(huì)被跳過(guò)。
啟動(dòng)重試狀態(tài)
UP_FOR_RETRY (僅任務(wù)級(jí)|未完成狀態(tài)):UP _ FOR _ RETRY 狀態(tài)表示之前的嘗試已經(jīng)失敗,因?yàn)樵撊蝿?wù)已經(jīng)重試了多次,它被標(biāo)記為準(zhǔn)備重試。但是在下一次迭代中,任務(wù)需要等待多長(zhǎng)時(shí)間才能重試呢?氣流調(diào)度程序在重試時(shí)間間隔過(guò)后等待,并在下一個(gè)調(diào)度程序的心跳到達(dá)時(shí)啟動(dòng)。
啟動(dòng)重新計(jì)劃狀態(tài)
UP _ FOR _ schedule*(僅任務(wù)級(jí)|未完成狀態(tài))*:UP _ FOR _ schedule 是自 Airflow 1.10.2 以來(lái)新引入的狀態(tài),更多細(xì)節(jié)可以參考 Apache Airflow 1.10.2 新版本中的亮點(diǎn)。這種狀態(tài)主要適用于傳感器,它有助于避免消耗所有工作插槽,以便解決死鎖情況。
排隊(duì)狀態(tài)
排隊(duì) (僅任務(wù)級(jí)|未完成狀態(tài)):當(dāng)任務(wù)等待執(zhí)行器中的槽時(shí),觸發(fā)隊(duì)列狀態(tài)。隊(duì)列狀態(tài)只是一個(gè)等待執(zhí)行程序在管道中執(zhí)行簿記的列表,執(zhí)行程序?qū)⑷蝿?wù)分配給工作程序來(lái)運(yùn)行實(shí)際的任務(wù)。一旦一個(gè)槽可用,就從隊(duì)列中拉出一個(gè)任務(wù)(有優(yōu)先級(jí)),工人將運(yùn)行它。
無(wú)狀態(tài)
無(wú) (僅任務(wù)級(jí)|未完成狀態(tài)):無(wú)狀態(tài)可能會(huì)引起混淆,因?yàn)樗谀承┱Z(yǔ)言中表示未知。這里它只是一種描述新任務(wù)創(chuàng)建的方式,它的初始狀態(tài)是未知的。當(dāng)一個(gè)新的 dagrun 啟動(dòng)時(shí),您會(huì)觀察到 None 狀態(tài),它的所有任務(wù)首先都是 None。此外,如果您想要重新運(yùn)行某些 Dag 或任務(wù),一旦您清除了狀態(tài),所有這些狀態(tài)都將變?yōu)?None 狀態(tài)。在后端,如果是第一次啟動(dòng) dagrun,盡管所有任務(wù)都處于 NONE 狀態(tài),但在任務(wù)被調(diào)度之前,您不會(huì)在 DB 中找到任何條目。然而,重新運(yùn)行一個(gè)任務(wù)來(lái)清除它的狀態(tài)是另一回事,在重新運(yùn)行之前,您會(huì)在 DB 中找到它以前的狀態(tài)。
已調(diào)度 *(僅限任務(wù)級(jí)|未完成狀態(tài))*已調(diào)度狀態(tài)是讓氣流將任務(wù)發(fā)送給執(zhí)行者運(yùn)行。氣流調(diào)度程序檢查多種條件,以確定是否可以調(diào)度任務(wù)。例如,由于整個(gè)氣流中的可用時(shí)隙,以及掛鐘時(shí)間和計(jì)劃時(shí)間之間的時(shí)間,任務(wù)可以被阻止進(jìn)行計(jì)劃。一旦滿足了調(diào)度的所有條件,氣流調(diào)度器就會(huì)將任務(wù)推進(jìn)到調(diào)度狀態(tài)。
一個(gè)令人興奮的功能是改變氣流用戶界面的顏色。如果你不喜歡默認(rèn)的,這個(gè)新特性是在 Airflow 1.10.11 中引入的,你可以在 UI 中自定義狀態(tài)顏色
氣流任務(wù)生命周期圖(來(lái)自阿帕奇氣流
該狀態(tài)由氣流調(diào)度器和執(zhí)行器驅(qū)動(dòng)和控制。Airflow 官方 GitHub 有這個(gè)生命周期圖,很好地展示了狀態(tài)流程圖。我們已經(jīng)討論了每個(gè)狀態(tài)和傳感器的狀態(tài)(UP _ FOR _ RESCHEDULE)。此圖還顯示了每個(gè)組件的可能狀態(tài)列表??蛇x階段轉(zhuǎn)換是每個(gè)氣流操作器的選項(xiàng),由用戶控制以可選地執(zhí)行重試。盡管如此,所有其他階段都必須遵循這個(gè)轉(zhuǎn)換流程。
五彩繽紛的國(guó)家(照片由漢娜·摩根在 Unsplash 上拍攝)
狀態(tài)是氣流生態(tài)系統(tǒng)中不可或缺的元素。狀態(tài)就像氣流中的安全帶。它對(duì)每個(gè) dagrun 和任務(wù)進(jìn)行跟蹤,每當(dāng) Airflow 調(diào)度器、執(zhí)行器或工作器中出現(xiàn)崩潰時(shí),狀態(tài)會(huì)作為檢查點(diǎn)執(zhí)行,因此我們不必從頭開(kāi)始。此外,由于狀態(tài)也顯示在 Airflow UI 中,每個(gè)人都將其作為監(jiān)控狀態(tài)的中心位置。最后,Airflow 在內(nèi)部使用狀態(tài)來(lái)跟蹤任務(wù)的進(jìn)度,工程師可以依靠狀態(tài)來(lái)執(zhí)行更多定制的任務(wù)。我希望這篇文章能給你一個(gè)氣流狀態(tài)的基本概念,以及為什么理解每種狀態(tài)之間的區(qū)別是必要的。干杯!!
希望這個(gè)故事對(duì)你有幫助。本文是我的工程&數(shù)據(jù)科學(xué)系列的部分,目前包括以下內(nèi)容:
趙承志
View list47 stories
你也可以 訂閱我的新文章 或者成為 推薦媒介會(huì)員 無(wú)限制訪問(wèn)媒介上的所有故事。
如果有問(wèn)題/評(píng)論,請(qǐng)不要猶豫,寫(xiě)下這個(gè)故事的評(píng)論或通過(guò) Linkedin 或 Twitter 直接聯(lián)系我。
原文:https://towardsdatascience.com/airflow-vs-luigi-vs-argo-vs-mlflow-vs-kubeflow-b3785dd1ed0c?source=collection_archive---------10-----------------------
來(lái)源:作者
最近,用于編排任務(wù)和數(shù)據(jù)工作流的新工具激增(有時(shí)被稱為“MLOps”)。這些工具的數(shù)量會(huì)使我們很難選擇使用哪些工具,也很難理解它們是如何重疊的,所以我們決定直接比較一些最流行的工具。
氣流是最受歡迎的解決方案,其次是 Luigi。也有新的競(jìng)爭(zhēng)者,他們都在快速成長(zhǎng)。(來(lái)源:作者)
總的來(lái)說(shuō),Apache Airflow 是最受歡迎的工具,也是功能最廣泛的工具,但是 Luigi 是一個(gè)類似的工具,更容易上手。當(dāng)他們已經(jīng)在使用 Kubernetes 時(shí),Argo 是他們經(jīng)常求助的一個(gè)團(tuán)隊(duì),Kubeflow 和 MLFlow 服務(wù)于更多與部署機(jī)器學(xué)習(xí)模型和跟蹤實(shí)驗(yàn)相關(guān)的利基需求。
在我們深入進(jìn)行詳細(xì)的比較之前,理解一些與任務(wù)編排相關(guān)的更廣泛的概念是有用的。
較小的團(tuán)隊(duì)通常從手動(dòng)管理任務(wù)開(kāi)始,例如清理數(shù)據(jù)、訓(xùn)練機(jī)器學(xué)習(xí)模型、跟蹤結(jié)果以及將模型部署到生產(chǎn)服務(wù)器。隨著團(tuán)隊(duì)和解決方案規(guī)模的增長(zhǎng),重復(fù)步驟的數(shù)量也在增長(zhǎng)??煽康貓?zhí)行這些任務(wù)也變得更加重要。
這些任務(wù)相互依賴的復(fù)雜方式也在增加。當(dāng)您開(kāi)始時(shí),您可能有一個(gè)需要每周或每月運(yùn)行一次的任務(wù)流水線。這些任務(wù)需要以特定的順序運(yùn)行。隨著你的成長(zhǎng),這條管道變成了一個(gè)擁有動(dòng)態(tài)分支的網(wǎng)絡(luò)。在某些情況下,一些任務(wù)會(huì)引發(fā)其他任務(wù),而這些任務(wù)可能依賴于其他幾個(gè)先運(yùn)行的任務(wù)。
這個(gè)網(wǎng)絡(luò)可以被建模為 DAG——一個(gè)有向無(wú)環(huán)圖,它對(duì)每個(gè)任務(wù)以及它們之間的依賴關(guān)系進(jìn)行建模。
流水線是一個(gè)有限的 DAG,其中每個(gè)任務(wù)最多有一個(gè)上游和一個(gè)下游依賴。(來(lái)源:作者)
工作流編排工具允許您通過(guò)指定所有任務(wù)以及它們?nèi)绾蜗嗷ヒ蕾噥?lái)定義 Dag。然后,該工具按計(jì)劃以正確的順序執(zhí)行這些任務(wù),在運(yùn)行下一個(gè)任務(wù)之前重試任何失敗的任務(wù)。它還監(jiān)控進(jìn)度,并在出現(xiàn)故障時(shí)通知您的團(tuán)隊(duì)。
像 Jenkins 這樣的 CI/CD 工具通常用于自動(dòng)測(cè)試和部署代碼,這些工具和任務(wù)編排工具之間有很強(qiáng)的相似性——但也有重要的區(qū)別。盡管理論上你可以使用這些 CI/CD 工具來(lái)編排動(dòng)態(tài)的、相互關(guān)聯(lián)的任務(wù),但是在一定的復(fù)雜程度上,你會(huì)發(fā)現(xiàn)使用更通用的工具比如 Apache Airflow 會(huì)更容易。
【想要更多這樣的文章?注冊(cè)我們的簡(jiǎn)訊。我們每周最多分享一篇文章,從不發(fā)送任何形式的推廣郵件】。
總體而言,任何編排工具的重點(diǎn)都是確保集中化、可重復(fù)、可再現(xiàn)、和高效的工作流:所有自動(dòng)化任務(wù)的虛擬指揮中心。記住這一點(diǎn),讓我們看看一些最流行的工作流工具是如何組合起來(lái)的。
您可能應(yīng)該使用:
- Apache air flow如果你想要功能最全、最成熟的工具,你可以花時(shí)間去學(xué)習(xí)它的工作原理、設(shè)置和維護(hù)它。
- Luigi如果你需要比氣流更容易學(xué)習(xí)曲線的東西。它的功能更少,但更容易起飛。
- 如果你已經(jīng)深深地投入到 Kubernetes 生態(tài)系統(tǒng)中,并且想要以 pods 的形式管理你的所有任務(wù),那么就用 YAML 而不是 Python 來(lái)定義它們。
- kube flow如果你想使用 Kubernetes 但仍然用 Python 而不是 YAML 來(lái)定義你的任務(wù)。
- MLFlow 如果你更關(guān)心跟蹤實(shí)驗(yàn)或者使用 MLFlow 的預(yù)定義模式跟蹤和部署模型,而不是尋找一個(gè)可以適應(yīng)你現(xiàn)有定制工作流的工具。
(來(lái)源:作者)-獲得更多機(jī)器學(xué)習(xí)技巧— 獲取我們的每周簡(jiǎn)訊
為了快速概述,我們?cè)谝韵路矫鎸?duì)這些庫(kù)進(jìn)行了比較:
- ****成熟度:基于項(xiàng)目的年齡以及修復(fù)和提交的數(shù)量;
- ****人氣:基于領(lǐng)養(yǎng)和 GitHub 明星;
- ****簡(jiǎn)單:基于易于入職和采用;
- ****廣度:基于每個(gè)項(xiàng)目的專業(yè)化程度和適應(yīng)性;
- ****語(yǔ)言:基于您與工具交互的主要方式。
這些不是嚴(yán)格或科學(xué)的基準(zhǔn),但它們旨在讓您快速了解這些工具是如何重疊的,以及它們彼此之間有何不同。更多細(xì)節(jié),請(qǐng)看下面的頭對(duì)頭對(duì)比。
Luigi 和 Airflow 解決類似的問(wèn)題,但 Luigi 要簡(jiǎn)單得多。它包含在單個(gè)組件中,而 Airflow 有多個(gè)模塊,可以以不同的方式進(jìn)行配置。Airflow 擁有更大的社區(qū)和一些額外的功能,但是學(xué)習(xí)曲線要陡峭得多。具體來(lái)說(shuō),Airflow 在調(diào)度方面要強(qiáng)大得多,它提供了一個(gè)日歷 UI 來(lái)幫助您設(shè)置任務(wù)應(yīng)該何時(shí)運(yùn)行。使用 Luigi,您需要編寫(xiě)更多自定義代碼來(lái)按計(jì)劃運(yùn)行任務(wù)。
這兩個(gè)工具都使用 Python 和 Dag 來(lái)定義任務(wù)和依賴關(guān)系。如果你有一個(gè)小團(tuán)隊(duì),需要快速上手,就用 Luigi。如果你有一個(gè)更大的團(tuán)隊(duì),可以使用氣流,一旦你度過(guò)了學(xué)習(xí)曲線,可以用最初的生產(chǎn)力打擊來(lái)?yè)Q取更多的權(quán)力。
Argo 建立在 Kubernetes 之上,每個(gè)任務(wù)作為一個(gè)獨(dú)立的 Kubernetes pod 運(yùn)行。如果您已經(jīng)將 Kubernetes 用于您的大部分基礎(chǔ)設(shè)施,這可能很方便,但是如果您沒(méi)有,這將增加復(fù)雜性。Luigi 是一個(gè) Python 庫(kù),可以和 Python 包管理工具一起安裝,比如 pip 和 conda。Argo 是 Kubernetes 的擴(kuò)展,使用 Kubernetes 安裝。雖然這兩個(gè)工具都允許你將任務(wù)定義為 Dag,但使用 Luigi,你將使用 Python 來(lái)編寫(xiě)這些定義,而使用 Argo,你將使用 YAML。
如果你已經(jīng)投資了 Kubernetes,并且知道你所有的任務(wù)都是 pods,那么就使用 Argo。如果編寫(xiě) DAG 定義的開(kāi)發(fā)人員對(duì) YAML 比對(duì) Python 更熟悉,您也應(yīng)該考慮這一點(diǎn)。如果您沒(méi)有在 Kubernetes 上運(yùn)行,并且團(tuán)隊(duì)中有 Python 專家,請(qǐng)使用 Luigi。
Luigi 是一個(gè)基于 Python 的庫(kù),用于一般的任務(wù)編排,而 Kubeflow 是一個(gè)基于 Kubernetes 的工具,專門(mén)用于機(jī)器學(xué)習(xí)工作流。Luigi 是為編排一般任務(wù)而構(gòu)建的,而 Kubeflow 則為實(shí)驗(yàn)跟蹤、超參數(shù)優(yōu)化和 Jupyter 筆記本服務(wù)提供了預(yù)構(gòu)建的模式。Kubeflow 由兩個(gè)不同的組件組成:Kubeflow 和 Kubeflow 管道。后者側(cè)重于模型部署和 CI/CD,它可以獨(dú)立于主要的 Kubeflow 特性使用。
如果您需要編排各種不同的任務(wù),從數(shù)據(jù)清理到模型部署,請(qǐng)使用 Luigi。如果您已經(jīng)使用了 Kubernetes,并且想要協(xié)調(diào)常見(jiàn)的機(jī)器學(xué)習(xí)任務(wù),如實(shí)驗(yàn)跟蹤和模型訓(xùn)練,請(qǐng)使用 Kubeflow。
Luigi 是一個(gè)通用的任務(wù)編排系統(tǒng),而 MLFlow 是一個(gè)更專業(yè)的工具,可以幫助管理和跟蹤你的機(jī)器學(xué)習(xí)生命周期和實(shí)驗(yàn)。您可以使用 Luigi 來(lái)定義一般的任務(wù)和依賴項(xiàng)(例如訓(xùn)練和部署模型),但是您可以將 MLFlow 直接導(dǎo)入到您的機(jī)器學(xué)習(xí)代碼中,并使用它的幫助器函數(shù)來(lái)記錄信息(例如您正在使用的參數(shù))和工件(例如經(jīng)過(guò)訓(xùn)練的模型)。還可以使用 MLFlow 作為命令行工具,為用常用工具(如 scikit-learn)構(gòu)建的模型提供服務(wù),或者將它們部署到常用平臺(tái)(如 AzureML 或 Amazon SageMaker)。
Argo 和 Airflow 都允許你將任務(wù)定義為 Dag,但是在 Airflow 中你用 Python 來(lái)完成,而在 Argo 中你用 YAML。Argo 作為一個(gè) Kubernetes pod 運(yùn)行每個(gè)任務(wù),而 Airflow 生活在 Python 生態(tài)系統(tǒng)中。Canva 在選擇 Argo 之前評(píng)估了這兩個(gè)選項(xiàng),您可以觀看這個(gè)演講,了解他們的詳細(xì)比較和評(píng)估。
如果你想要一個(gè)更成熟的工具,不在乎 Kubernetes,就用氣流。如果您已經(jīng)投資了 Kubernetes,并且想要運(yùn)行在不同堆棧中編寫(xiě)的各種各樣的任務(wù),請(qǐng)使用 Argo。
Airflow 是一個(gè)通用的任務(wù)編排平臺(tái),而 Kubeflow 則專門(mén)專注于機(jī)器學(xué)習(xí)任務(wù),如實(shí)驗(yàn)跟蹤。這兩個(gè)工具都允許使用 Python 定義任務(wù),但是 Kubeflow 在 Kubernetes 上運(yùn)行任務(wù)。Kubeflow 分為 Kubeflow 和 Kubeflow 管道:后一個(gè)組件允許您指定 Dag,但它更側(cè)重于部署和模型服務(wù),而不是一般任務(wù)。
如果您需要一個(gè)能夠運(yùn)行各種不同任務(wù)的成熟、廣闊的生態(tài)系統(tǒng),請(qǐng)使用 Airflow。如果您已經(jīng)使用了 Kubernetes,并希望機(jī)器學(xué)習(xí)解決方案有更多現(xiàn)成的模式,請(qǐng)使用 Kubeflow。
Airflow 是一個(gè)通用的任務(wù)編排平臺(tái),而 MLFlow 是專門(mén)為優(yōu)化機(jī)器學(xué)習(xí)生命周期而構(gòu)建的。這意味著 MLFlow 具有運(yùn)行和跟蹤實(shí)驗(yàn)、訓(xùn)練和部署機(jī)器學(xué)習(xí)模型的功能,而 Airflow 具有更廣泛的用例,你可以使用它來(lái)運(yùn)行任何一組任務(wù)。Airflow 是一組用于管理和調(diào)度任務(wù)的組件和插件。MLFlow 是一個(gè) Python 庫(kù),可以導(dǎo)入到現(xiàn)有的機(jī)器學(xué)習(xí)代碼中,也是一個(gè)命令行工具,可以用來(lái)訓(xùn)練和部署用 scikit-learn 編寫(xiě)的機(jī)器學(xué)習(xí)模型到 Amazon SageMaker 或 AzureML。
如果您想要一種有見(jiàn)解的、開(kāi)箱即用的方式來(lái)管理您的機(jī)器學(xué)習(xí)實(shí)驗(yàn)和部署,請(qǐng)使用 MLFlow。如果您有更復(fù)雜的需求,并且希望更多地控制如何管理機(jī)器學(xué)習(xí)生命周期,請(qǐng)使用 Airflow。
Kubeflow 的部分(如 Kubeflow 管道)是建立在 Argo 之上的,但 Argo 是為了編排任何任務(wù)而建立的,而 Kubeflow 專注于那些特定于機(jī)器學(xué)習(xí)的任務(wù)——如實(shí)驗(yàn)跟蹤、超參數(shù)調(diào)整和模型部署。 Kubeflow Pipelines 是 Kubeflow 的一個(gè)獨(dú)立組件,專注于模型部署和 CI/CD,可以獨(dú)立于 Kubeflow 的其他功能使用。這兩個(gè)工具都依賴于 Kubernetes,如果你已經(jīng)采用了它,你可能會(huì)更感興趣。有了 Argo,你可以使用 YAML 定義你的任務(wù),而 Kubeflow 允許你使用 Python 接口。
如果您需要管理作為 Kubernetes pods 運(yùn)行的一般任務(wù)的 DAG,請(qǐng)使用 Argo。如果你想要一個(gè)專注于機(jī)器學(xué)習(xí)解決方案的更有主見(jiàn)的工具,請(qǐng)使用 Kubeflow。
Argo 是一個(gè)任務(wù)編排工具,允許您將任務(wù)定義為 Kubernetes pods,并將其作為 YAML 定義的 DAG 運(yùn)行。MLFlow 是一個(gè)更加專業(yè)化的工具,它不允許您定義任意的任務(wù)或它們之間的依賴關(guān)系。相反,您可以將 MLFlow 作為 Python 庫(kù)導(dǎo)入到現(xiàn)有的(Python)機(jī)器學(xué)習(xí)代碼庫(kù)中,并使用其助手函數(shù)來(lái)記錄工件和參數(shù),以幫助進(jìn)行分析和實(shí)驗(yàn)跟蹤。您還可以使用 MLFlow 的命令行工具來(lái)訓(xùn)練 scikit-learn 模型,并將它們部署到 Amazon Sagemaker 或 Azure ML,以及管理您的 Jupyter 筆記本。
如果您需要管理一般的任務(wù),并希望在 Kubernetes 上運(yùn)行它們,請(qǐng)使用 Argo。如果您想要一種自以為是的方式來(lái)管理托管云平臺(tái)的機(jī)器學(xué)習(xí)生命周期,請(qǐng)使用 MLFlow。
Kubeflow 和 MLFlow 都是比通用任務(wù)編排平臺(tái)(如 Airflow 或 Luigi)更小、更專業(yè)的工具。Kubeflow 依賴于 Kubernetes,而 MLFlow 是一個(gè) Python 庫(kù),可以幫助你在現(xiàn)有的機(jī)器學(xué)習(xí)代碼中添加實(shí)驗(yàn)跟蹤。Kubeflow 允許您構(gòu)建一個(gè)完整的 DAG,其中每個(gè)步驟都是一個(gè) Kubernetes pod,但 MLFlow 具有內(nèi)置功能,可以將您的 scikit-learn 模型部署到 Amazon Sagemaker 或 Azure ML。
如果你想跟蹤你的機(jī)器學(xué)習(xí)實(shí)驗(yàn),并在 Kubernetes 的支持下以更加定制的方式部署你的解決方案,請(qǐng)使用 Kubeflow。如果您想要一種更簡(jiǎn)單的方法來(lái)進(jìn)行實(shí)驗(yàn)跟蹤,并希望部署到 Amazon Sagemaker 等托管平臺(tái),請(qǐng)使用 MLFlow。
雖然所有這些工具都有不同的關(guān)注點(diǎn)和不同的優(yōu)勢(shì),但是沒(méi)有一個(gè)工具能夠讓您一勞永逸。在為選擇哪種工具傷腦筋之前,通常重要的是確保你有好的過(guò)程,包括好的團(tuán)隊(duì)文化、無(wú)過(guò)失回顧和長(zhǎng)期目標(biāo)。如果你正在努力解決任何機(jī)器學(xué)習(xí)問(wèn)題,請(qǐng)聯(lián)系我們。我們喜歡談?wù)撋痰?#xff0c;您可以安排與我們的首席執(zhí)行官進(jìn)行免費(fèi)通話。
原文:https://towardsdatascience.com/airline-industry-and-air-canada-stock-prediction-using-deep-learning-c92da3908a3b?source=collection_archive---------57-----------------------
伊森·麥克阿瑟在 Unsplash 上的照片
自從全球范圍內(nèi)的封鎖和獨(dú)特的冠狀病毒的傳播開(kāi)始以來(lái),全球的航空業(yè)一直不景氣。
最近,也有很多關(guān)于沃倫巴菲特出售他在各航空公司的股份的新聞。與他的行動(dòng)相反,價(jià)值投資者正在鼓勵(lì)許多人持有航空公司股票,尤其是那些具有長(zhǎng)期投資眼光和風(fēng)險(xiǎn)偏好的股票。
接二連三的新聞激起了我的興趣,我決定進(jìn)行一些自己的測(cè)試來(lái)驗(yàn)證我所看到和聽(tīng)到的新聞。
為了更好地理解(在個(gè)人層面)航空業(yè)和加拿大航空公司的表現(xiàn),我研究了加拿大的飛機(jī)運(yùn)行情況,使用 LSTM 模型預(yù)測(cè)加拿大航空公司的未來(lái)股票價(jià)格,并最終使用貼現(xiàn)現(xiàn)金流(DCF)法得出內(nèi)在股票價(jià)值。
我從 Stat Canada 收集了從 2015 年 1 月(主要機(jī)場(chǎng))到 2020 年 4 月的飛機(jī)起降數(shù)據(jù),并進(jìn)行整理。隨后,我在 2018 年 7 月創(chuàng)建了一個(gè)與飛機(jī)移動(dòng)相關(guān)的指數(shù),因?yàn)檫@是最高的數(shù)字-這將使我能夠衡量未來(lái)牛市中飛機(jī)移動(dòng)的水平。
首先,我創(chuàng)建了一年中所有十二個(gè)月的月平均值,并用它來(lái)創(chuàng)建每個(gè)月的季節(jié)性指數(shù)(即一個(gè)月的月平均值/所有月份的平均值)。然后,我計(jì)算了每個(gè)月的平均飛機(jī)力矩(指數(shù)值),并檢查了這些值與 2020 年 1 月至 5 月受影響月份的“covid”值之間的差異。2020 年 4 月的指數(shù)值為 10,這與航空公司在受 covid 影響的月份削減 85-90%運(yùn)力的報(bào)告相關(guān)。
4 月份的產(chǎn)能僅為“歷史最佳月份”的 10%
此外,我假設(shè) covid 以及國(guó)際旅行限制和封鎖的影響將開(kāi)始顯現(xiàn)——至少在 2020 年 6 月底之前對(duì)企業(yè)和其他重要的經(jīng)濟(jì)驅(qū)動(dòng)因素而言??紤]到飛機(jī)將不得不接受維護(hù)檢查,飛行員將不得不在服役前重獲“貨幣”,我將指數(shù)差向下調(diào)整了 2.5 點(diǎn),以迎合保守的增長(zhǎng)估計(jì)。
我的目的是預(yù)測(cè)價(jià)值,直到完成一個(gè)穩(wěn)定的商業(yè)周期,因?yàn)檫@將表明飛機(jī)活動(dòng)的正?;?/p>
我發(fā)現(xiàn)飛機(jī)活動(dòng)在 2022 年 5 月達(dá)到“covid 之前”的水平,并在 2023 年 12 月底穩(wěn)定下來(lái)。
我在 Python 中使用了一個(gè)簡(jiǎn)單的單變量 LSTM 模型來(lái)預(yù)測(cè)加拿大航空公司的未來(lái)價(jià)格(直到 2023 年 12 月)。在這里找到筆記本(你可以上傳自己的數(shù)據(jù)集來(lái)運(yùn)行測(cè)試)。
在航空業(yè)面臨 9/11 事件的影響期間,我在航空公司股票的數(shù)據(jù)集上訓(xùn)練并驗(yàn)證了該模型。我選擇這個(gè)數(shù)據(jù)集有兩個(gè)原因。首先,這類似于現(xiàn)在的情況,顧客/公眾害怕坐飛機(jī)。其次,這些年來(lái),航空業(yè)受到了幾乎是不可抗力的最嚴(yán)重打擊,這導(dǎo)致了世界飛行方式的改變,引入了各種安全法規(guī)和檢查。由于這將允許必要的業(yè)務(wù)增長(zhǎng)延遲,我認(rèn)為這將有助于預(yù)測(cè)更適合后 covid 經(jīng)濟(jì),后者可能面臨類似的限制。
紅色-股票價(jià)格|藍(lán)色-飛機(jī)運(yùn)動(dòng)
結(jié)果表明,加拿大航空公司的股價(jià)將在 2023 年 12 月徘徊在 16 美元,這是在經(jīng)濟(jì)穩(wěn)定和復(fù)蘇之后。
此外,為了衡量加拿大航空公司股票的當(dāng)前價(jià)格,我使用了基本的現(xiàn)金流量貼現(xiàn)法(WACC-5.7%,EV/EBITDA-6x)和格拉漢姆法(TTM 每股收益,調(diào)整以反映當(dāng)前 AAA 債券收益率,增長(zhǎng)率為 4%)來(lái)計(jì)算加拿大航空公司股票的內(nèi)在價(jià)值。
相應(yīng)計(jì)算的內(nèi)在價(jià)值為 9.90 美元和 12.3 美元。Python 模型預(yù)測(cè)底部為 3.5 美元,然后再次向上移動(dòng)。
經(jīng)濟(jì)— 假設(shè)飛機(jī)起降代表了航空業(yè)的健康(航空業(yè)反過(guò)來(lái)代表了經(jīng)濟(jì)的健康),由于大多數(shù)旅行都是通過(guò)可自由支配的資金進(jìn)行的,因此經(jīng)濟(jì)似乎將在 2021 年第三季度穩(wěn)定增長(zhǎng),并將在 2022 年第三季度達(dá)到 Q2 之前的水平,然后在 2024 年 Q1 完全穩(wěn)定。有趣的是,國(guó)際航空運(yùn)輸協(xié)會(huì)——一個(gè)全球航空公司協(xié)會(huì)預(yù)測(cè),乘客需求將在 2024 年前才會(huì)恢復(fù),這有點(diǎn)類似于我的模型對(duì) 2023 年 12 月的預(yù)測(cè)。
航空業(yè)— 雖然模型已經(jīng)以相當(dāng)初步的方式完成,但航空業(yè)似乎將需要三年的大部分時(shí)間來(lái)恢復(fù)。此外,觀察消費(fèi)者行為的變化以及它將如何影響航空旅行也是很有趣的,因?yàn)檫@將在很大程度上影響旅游和酒店業(yè)的未來(lái)。在目前裁員和儲(chǔ)存飛機(jī)之后,航空公司如何擴(kuò)大業(yè)務(wù)規(guī)模以滿足更高的需求,也是一個(gè)有趣的問(wèn)題。在長(zhǎng)期裁員(通常為 6 個(gè)月)后,對(duì)飛機(jī)和機(jī)組人員進(jìn)行各種檢查和重新培訓(xùn),將需要航空公司不斷感受經(jīng)濟(jì)的脈搏,以便他們能夠計(jì)劃?rùn)C(jī)組人員培訓(xùn)和飛機(jī)維護(hù)檢查,以利用幾年后的周期高峰。
加拿大航空股票— 根據(jù)最近收盤(pán)價(jià)(2020 年 5 月 15 日 14.62 美元),與通過(guò) DCF 和格雷厄姆方法得出的內(nèi)在價(jià)值平均值相比,加拿大航空股票被高估了 35%。這也許解釋了為什么以發(fā)現(xiàn)價(jià)值股聞名的沃倫·巴菲特在今年早些時(shí)候拋售了他的航空公司股票。因此,除非你的投資期限是 7-10 年,并且很年輕/或者有很高的風(fēng)險(xiǎn)偏好,否則航空股(至少是加拿大航空)似乎是一個(gè)賠本買(mǎi)賣(mài)。
我想澄清的是,用于預(yù)測(cè)的方法和假設(shè)沒(méi)有考慮到各種細(xì)微差別。所有觀點(diǎn)/意見(jiàn)都是我個(gè)人的,所做的工作只是為了幫助我自己更好地理解疫情對(duì)經(jīng)濟(jì)的影響。此外,不能孤立地看待通過(guò)機(jī)器學(xué)習(xí)和 DCF 估值進(jìn)行的預(yù)測(cè)。
原文:https://towardsdatascience.com/ais-coexistence-with-humans-and-why-we-should-all-be-concerned-37a8cc444600?source=collection_archive---------43-----------------------
注 :這篇文章很大程度上是受李開(kāi)復(fù)的‘AI 超能力’的啟發(fā),加上我個(gè)人的一些想法。許多觀點(diǎn)是從他的書(shū)中摘錄的,任何發(fā)現(xiàn)的相似之處都是有意的。
作為一名人工智能的學(xué)生、實(shí)踐者和倡導(dǎo)者,我很幸運(yùn)能夠一窺人工智能技術(shù)在表面之下是如何工作的,并且在一定程度上也讓我想象人工智能不僅在現(xiàn)在,而且在未來(lái)會(huì)有什么樣的可能性。
對(duì)于普通人來(lái)說(shuō),人工智能被視為一種有可能在不同工作領(lǐng)域取代人類的技術(shù),而且這種取代已經(jīng)開(kāi)始。然而,他們沒(méi)有看到的是,人類和整個(gè)社會(huì)將在多大程度上受到人工智能革命的影響,就像工業(yè)革命和互聯(lián)網(wǎng)繁榮如何戲劇性地改變了我們的生活方式一樣。
讓我感到害怕的是,如果人們繼續(xù)忘記人工智能到底是什么以及它能做什么,郝在所謂的“人工智能精英”與世界其他人(她認(rèn)為是“無(wú)用”的人)之間的反烏托邦世界可能會(huì)成為現(xiàn)實(shí)。
作為一名未來(lái)學(xué)家,我認(rèn)為在過(guò)渡到人工智能驅(qū)動(dòng)的世界時(shí),每個(gè)人都應(yīng)該意識(shí)到這一點(diǎn)。
來(lái)源:來(lái)自 istockphoto 的 BahadirTanriover
蒸汽機(jī)、縫紉機(jī)、電的發(fā)明都取代了工作。我們已經(jīng)克服了。人工智能的挑戰(zhàn)在于,這 40%,無(wú)論是 15 年還是 25 年,都比以前的革命來(lái)得更快。”
—李開(kāi)復(fù)
上面的引用概括了 Lee 對(duì)我們目前生活的這場(chǎng)人工智能革命的預(yù)言——在未來(lái) 15 到 25 年內(nèi),世界上 40%的工作將被人工智能技術(shù)取代,關(guān)鍵的區(qū)別在于這種取代的變化率。
在人類歷史上,我們從第一次工業(yè)革命中幸存了下來(lái)——這是一次向新制造工藝的大規(guī)模過(guò)渡,徹底改變了商品的生產(chǎn)方式。隨后,我們?cè)诘诙喂I(yè)革命中蓬勃發(fā)展,也被稱為技術(shù)革命,這是一個(gè)商品和服務(wù)快速標(biāo)準(zhǔn)化和工業(yè)化的階段,包括鐵路網(wǎng)絡(luò)、污水處理系統(tǒng)、電氣化、海運(yùn)、汽車(chē)等領(lǐng)域。
許多人現(xiàn)在將我們生活的時(shí)代稱為人工智能革命,也可能是我們(未來(lái))的孩子可能知道的第三次工業(yè)革命,因?yàn)樯唐泛头?wù)的消費(fèi)方式已經(jīng)發(fā)生了巨大的變化。相對(duì)于生產(chǎn)的商品數(shù)量,今天提供的服務(wù)的數(shù)量和類型已經(jīng)激增,因?yàn)榛ヂ?lián)網(wǎng)使這成為可能。
不僅僅是互聯(lián)網(wǎng),而是支撐整個(gè)互聯(lián)網(wǎng)生態(tài)系統(tǒng)的外圍設(shè)備的快速發(fā)展,以及隨之而來(lái)的人工智能的發(fā)展。
人工智能是一種在有明確輸入和輸出的問(wèn)題上蓬勃發(fā)展的技術(shù)。通常,這些是優(yōu)化問(wèn)題(監(jiān)督學(xué)習(xí)),如信用評(píng)分、垃圾郵件分類和情感分析。當(dāng)輸出沒(méi)有被標(biāo)記時(shí)(例如,垃圾郵件/非垃圾郵件,肯定/否定),我們也可以根據(jù)算法“認(rèn)為”每個(gè)數(shù)據(jù)點(diǎn)應(yīng)該被分類到什么類別來(lái)進(jìn)行分類(無(wú)監(jiān)督)。前面提到的是典型的傳統(tǒng)機(jī)器學(xué)習(xí)方法(例如,隨機(jī)森林、支持向量機(jī)、邏輯/線性回歸、基于密度的模型),它們已經(jīng)存在并被研究了很長(zhǎng)一段時(shí)間。
導(dǎo)致這場(chǎng)人工智能革命的是深度學(xué)習(xí)技術(shù)進(jìn)步的擴(kuò)散和廣泛采用。不是“創(chuàng)造”而是 采用 這項(xiàng)技術(shù)。
正如李所說(shuō),我們不是處在一個(gè)發(fā)現(xiàn)的時(shí)代,而是處在一個(gè)實(shí)施的時(shí)代。人們很容易被誤導(dǎo),因?yàn)槊襟w不斷報(bào)道新的突破性成果,如谷歌的 DeepMind 和埃隆馬斯克的 OpenAI 擊敗的 AlphaGo 、 Dota 2 和 星際爭(zhēng)霸 ?;氐?2016 年,李·塞多爾甚至無(wú)法想象一個(gè)計(jì)算機(jī)程序在圍棋中擊敗他。如今,他已經(jīng)(2019 年)從圍棋退役,因?yàn)樗J(rèn)為“即使【他】成為№ 1,也有一個(gè)不能被打敗的實(shí)體”[5]。
圍棋、DotA 2 和星際爭(zhēng)霸冠軍被 AI 擊敗(圖片來(lái)源:作者創(chuàng)作)
繼 AlphaGo 之后, Dota 2 和 Starcraft 等更復(fù)雜的實(shí)時(shí)多人在線對(duì)戰(zhàn)競(jìng)技場(chǎng)(MOBA)游戲中的職業(yè)隊(duì)伍也在人們認(rèn)為不可能完成的任務(wù)中被廢黜。在像 Go 這樣的回合制游戲中,計(jì)算機(jī)程序可以可能窮盡游戲的所有可能狀態(tài)(棋盤(pán)或游戲在任何給定時(shí)間點(diǎn)的狀態(tài)),并預(yù)測(cè)下一步最佳行動(dòng)應(yīng)該是什么,在游戲的多次迭代中進(jìn)行訓(xùn)練,并采用各種探索-利用策略。對(duì)于 MOBA 游戲,這些游戲狀態(tài)指數(shù)(可能)為無(wú)窮大,包括額外的復(fù)雜性,如博弈論、不完全信息、長(zhǎng)期規(guī)劃和實(shí)時(shí)多人互動(dòng)[3]。然而,人們不知道的是,這些突破實(shí)際上是同一基礎(chǔ)技術(shù)的不同應(yīng)用。
AlphaStar 在行動(dòng)(來(lái)源:Deepmind 的博客
秘制醬?深度學(xué)習(xí)。
深度學(xué)習(xí)使用神經(jīng)網(wǎng)絡(luò)——一種通過(guò)特定網(wǎng)絡(luò)結(jié)構(gòu)解析輸入的獨(dú)特方式——來(lái)訓(xùn)練模型,以理解輸入和輸出之間的線性和非線性關(guān)系。神經(jīng)網(wǎng)絡(luò)試圖以類似的結(jié)構(gòu)模擬我們大腦中的神經(jīng)元,權(quán)重作為我們?cè)跊Q策時(shí)對(duì)每個(gè)特征(因素)的重視程度。這種捕捉非線性的能力是與傳統(tǒng)機(jī)器學(xué)習(xí)模型的關(guān)鍵區(qū)別,傳統(tǒng)機(jī)器學(xué)習(xí)模型本質(zhì)上大多是線性的。
為什么不早點(diǎn)采用這項(xiàng)技術(shù)?
盡管深度學(xué)習(xí)自 2000 年代以來(lái)就已經(jīng)存在,但直到 2016 年,由 Yann LeCun (人工智能的教父之一)領(lǐng)導(dǎo)的人工智能研究人員團(tuán)隊(duì)在世界上最大的圖像識(shí)別比賽中超過(guò)了基準(zhǔn)錯(cuò)誤率 ImageNet ,社區(qū)才認(rèn)識(shí)到它。當(dāng)時(shí),由于缺乏研究資金、計(jì)算能力和認(rèn)可,很少被采用。
艾教父:(從左至右)約舒阿·本吉奧、揚(yáng)·勒村和杰弗里·辛頓(圖片來(lái)源:作者創(chuàng)作)
今天,隨著 GPU 和 TPU 為我們的人工智能系統(tǒng)提供支持,人們能夠?qū)㈤_(kāi)源技術(shù)應(yīng)用到許多不同的領(lǐng)域。過(guò)去由博士主導(dǎo)的領(lǐng)域現(xiàn)在不再有同樣的準(zhǔn)入門(mén)檻,因?yàn)橥七M(jìn)技術(shù)需要先進(jìn)的技術(shù)技能,而技術(shù)應(yīng)用不需要同樣的嚴(yán)格程度。這就是開(kāi)源技術(shù)的魅力所在,它為人們提供了實(shí)驗(yàn)甚至改進(jìn)的基礎(chǔ)。
借助這項(xiàng)新技術(shù),我們可以看到深度學(xué)習(xí)在不同行業(yè)的快速應(yīng)用——從制造業(yè)到零售業(yè)到銀行業(yè),從藍(lán)領(lǐng)工人到白人。人工智能時(shí)代是一個(gè)變革的時(shí)代,一個(gè)顛覆可能成為新常態(tài)的時(shí)代。我們經(jīng)常看到行業(yè)被打亂,運(yùn)營(yíng)被打亂,我們的道路上可能擠滿了自動(dòng)駕駛汽車(chē)。
李將工作大致分為兩類——體力勞動(dòng)和認(rèn)知?jiǎng)趧?dòng)。在下面的兩個(gè)圖表中,縱軸描述了工作中的社會(huì)參與程度。
第一張圖表代表體力勞動(dòng)崗位的替代風(fēng)險(xiǎn),橫軸描述環(huán)境中的結(jié)構(gòu)水平。如前所述,AI 非常擅長(zhǎng)學(xué)習(xí)輸入與輸出有某種形式關(guān)系的任務(wù)(即近似)。不用說(shuō),基于規(guī)則的工作是最容易取代的,因?yàn)樗恍枰斯ぶ悄?#xff0c;只需要簡(jiǎn)單的自動(dòng)化。
替換風(fēng)險(xiǎn): 體力勞動(dòng)(來(lái)源:作者創(chuàng)作,內(nèi)容改編自李《AI 超能力》)
第二張圖表代表了認(rèn)知?jiǎng)趧?dòng)工作的替代風(fēng)險(xiǎn),橫軸描述了所涉及的創(chuàng)造力水平。
替換風(fēng)險(xiǎn): 認(rèn)知?jiǎng)趧?dòng)(來(lái)源:作者創(chuàng)作,內(nèi)容改編自李《AI 超能力》)
人們可以觀察到體力勞動(dòng)和認(rèn)知?jiǎng)趧?dòng)之間的一些相似之處——與具有某種不可預(yù)測(cè)性或需要?jiǎng)?chuàng)新思維的工作相比,涉及重復(fù)工作和很少社交互動(dòng)的基于規(guī)則的工作(體力或認(rèn)知)風(fēng)險(xiǎn)更大。
雖然更多的“傳統(tǒng)”工作可以被取代,但我認(rèn)為這 40%受影響的工作中有很大一部分是被取代的,而不是被 T21 取代的。
人工智能從未被創(chuàng)造出來(lái)做人類的工作——至少不完全是。機(jī)器人就是為此而生的。你可能會(huì)問(wèn)這有什么區(qū)別?在我看來(lái),機(jī)器人代表了人工智能可以駐留的物理實(shí)體。換句話說(shuō),人工智能代表了機(jī)器人的“T2 大腦”。傳統(tǒng)工作之所以會(huì)被取代,是因?yàn)槲覀冎恍枰粋€(gè)擁有“基于規(guī)則的大腦”的機(jī)器人。這就是工業(yè)革命發(fā)生并改變商品生產(chǎn)方式的原因。
然而,有了人工智能,我們?cè)噲D解決的問(wèn)題會(huì)成倍地(也許是無(wú)限地)變得更加困難。在醫(yī)療場(chǎng)景中,AI 很大程度上用于診斷甚至藥物開(kāi)發(fā)和患者監(jiān)測(cè)的階段。圖像識(shí)別的使用在醫(yī)療保健中更加普遍,因?yàn)閳D像識(shí)別變得如此之好如此之快。這通常在 X 射線圖像上進(jìn)行,以在檢測(cè)乳腺癌甚至新冠肺炎的跡象時(shí)識(shí)別異常。在前者中,已經(jīng)確定人工智能在診斷乳腺癌方面“優(yōu)于”醫(yī)生,假陽(yáng)性率降低了 1.2%,假陰性率降低了 2.7%[6]。
在銀行業(yè),人工智能用于識(shí)別交易中的異常情況(即欺詐)并批準(zhǔn)貸款。在海事方面,AI 用于識(shí)別海上物體,防止碰撞。在電子商務(wù)中,人工智能被用來(lái)預(yù)測(cè)你可能會(huì)購(gòu)買(mǎi)什么商品。在我們消費(fèi)內(nèi)容的網(wǎng)站上,人工智能被用來(lái)推薦我們可能想要觀看或閱讀的項(xiàng)目。在我們的 iPhones 上,人工智能被用來(lái)自動(dòng)完成我們的文本,回答我們?cè)诠雀杷阉魃湘I入的問(wèn)題(也稱為自然語(yǔ)言處理中的問(wèn)答),甚至在我們懶得自己做的時(shí)候,使用語(yǔ)音識(shí)別為我們?cè)O(shè)置鬧鐘。
這里的底線是——**AI補(bǔ)充了我們做事的方式,因?yàn)樗橄蟪隽宋覀兛赡鼙仨毺峁┛陀^意見(jiàn)的情感元素。**在乳腺癌診斷中,需要多名放射科醫(yī)生做出判斷,尤其是當(dāng)這些判斷不一致時(shí)。個(gè)體放射科醫(yī)生一生中只能經(jīng)歷有限次數(shù)的 x 光檢查,并且受到疲勞和容易出錯(cuò)的限制。人工智能系統(tǒng)可以在一天內(nèi)通過(guò)同樣數(shù)量的 X 射線,全天候工作,并提供類似甚至更高的準(zhǔn)確性。這也適用于其他工作。
然而,由于做同樣工作所需的人員數(shù)量將會(huì)減少,人員流動(dòng)是不可避免的。新的補(bǔ)充性工作將會(huì)出現(xiàn),以幫助這一過(guò)渡,例如需要了解如何操作這些人工智能驅(qū)動(dòng)技術(shù)的人員。
剩下的問(wèn)題是:
我們?nèi)绾螒?yīng)對(duì),更重要的是,如何適應(yīng)人工智能帶來(lái)的這些變化?
是的,AI 很?chē)樔恕?/p>
如果我們不知道它能做什么,那就太可怕了。如果我們無(wú)所事事,讓我們的工作被取代,或者更糟糕的是,被人工智能取代,這也很可怕。
在個(gè)人層面上,我們必須意識(shí)到人工智能的能力和可能性。思考人工智能如何影響我們的生活是很重要的。如果我們選擇不理解人工智能到底是什么,我們就會(huì)失敗,并有被取代或取代的風(fēng)險(xiǎn)。
在國(guó)家層面,各國(guó)需要開(kāi)始思考和利用他們擁有的任何數(shù)據(jù)。政府在推動(dòng)人工智能和技術(shù)的采用方面發(fā)揮了巨大作用,正如中國(guó)如何在幾十年內(nèi)從技術(shù)落后者加速成為人工智能超級(jí)大國(guó)一樣。人工智能有一種贏者通吃的趨勢(shì),因?yàn)橄刃姓呖梢詳U(kuò)大龐大的用戶群,而這本身就會(huì)產(chǎn)生數(shù)據(jù),從而形成一個(gè)自我延續(xù)的循環(huán)。
我們?cè)趥€(gè)人、企業(yè)和國(guó)家各個(gè)層面都承擔(dān)責(zé)任。就個(gè)人而言,跟上這場(chǎng)人工智能革命是我們的責(zé)任。 提升技能 前所未有的重要。有了互聯(lián)網(wǎng)上的大量可用資源,學(xué)習(xí)幾乎任何技能現(xiàn)在都是可能的。
在企業(yè)和國(guó)家層面,變革通常來(lái)自高層。高級(jí)管理層和內(nèi)閣部長(zhǎng)需要鼓勵(lì)創(chuàng)新,并撥出預(yù)算來(lái)鼓勵(lì)創(chuàng)新。人才管理也是至關(guān)重要的,因?yàn)槿斯ぶ悄苋瞬攀窍∪焙土鲃?dòng)的。
在全球范圍內(nèi),世界上可能不可避免地會(huì)出現(xiàn)一些人工智能巨頭(在人工智能領(lǐng)域占據(jù)主導(dǎo)地位的公司和國(guó)家)。這無(wú)疑會(huì)造成貧富之間以及第一和第三世界國(guó)家之間的差距越來(lái)越大。隨著強(qiáng)大的力量而來(lái)的是巨大的責(zé)任(是的,cheesy I know)——我真的希望這些人工智能大亨們能夠共同努力,在國(guó)內(nèi)和國(guó)際上彌合這一差距。
簡(jiǎn)而言之,沒(méi)有。
事實(shí)是,今天的人工智能沒(méi)有許多人想象的那么好,但也沒(méi)有我們擔(dān)心的那么糟糕。我們常常害怕我們沒(méi)有完全掌握的東西。
在 Lee 的書(shū)中,他將自主 AI 描述為第四波 AI(第一波是互聯(lián)網(wǎng) AI ,第二波是商業(yè) AI ,第三波是感知 AI )。它代表了機(jī)器從極其復(fù)雜的數(shù)據(jù)集進(jìn)行優(yōu)化的能力與其新發(fā)現(xiàn)的感官能力的融合[1]。簡(jiǎn)而言之,當(dāng)機(jī)器被賦予根據(jù)它感知的事物(無(wú)論是視覺(jué)還是聽(tīng)覺(jué))做出決定的能力(T21)。這些與簡(jiǎn)單地基于一套規(guī)則運(yùn)行的機(jī)器形成了鮮明的對(duì)比。
我們今天最接近的東西是自動(dòng)駕駛汽車(chē)。然而,當(dāng)談到自主人工智能時(shí),仍然有許多考慮和影響,人工智能倫理和治理發(fā)揮著巨大的作用。為了實(shí)現(xiàn)完全的人工智能自主,我們必須超越我們的有生之年去想象可能性。
人工智能塑造我們世界的方式每天都讓我感到驚訝,我希望這篇文章能揭示出今天我們的生活與人工智能是如何融合的。更重要的是,理解人工智能對(duì)我們個(gè)人、工人和全球公民的影響,是創(chuàng)造一個(gè)未來(lái)幾代人可以生活的更加公平的世界的基礎(chǔ)。
如果你還沒(méi)有讀過(guò)李開(kāi)復(fù)的《人工智能的超能力》,我強(qiáng)烈建議你讀一讀!
來(lái)源:故事鏡頭
支持我! —如果你喜歡我的內(nèi)容并且沒(méi)有訂閱 Medium,請(qǐng)考慮支持我并通過(guò)我的推薦鏈接訂閱這里 ( 注意:你的一部分會(huì)員費(fèi)將作為推薦費(fèi)分?jǐn)偨o我)。
[1] AI 超級(jí)大國(guó)——中國(guó)、硅谷與世界新秩序,李開(kāi)復(fù)
[2] 人工智能超能力對(duì)抗所有其他超能力
【3】阿爾法星:掌握即時(shí)戰(zhàn)略游戲星際爭(zhēng)霸 2
【4】開(kāi)啟 AI — Dota 2
李·塞多爾退休了
[6] 人工智能“勝過(guò)”診斷乳腺癌的醫(yī)生
原文:https://towardsdatascience.com/ais-next-step-abstraction-reasoning-db2d90e82799?source=collection_archive---------39-----------------------
抽象和推理語(yǔ)料庫(kù)中包含的 600 個(gè)任務(wù)的一個(gè)小樣本。
如果你想直接試一試: ARC 測(cè)試界面。
人工智能在過(guò)去十年取得了突飛猛進(jìn)的發(fā)展,解決了許多我們認(rèn)為不可能完成的任務(wù),但我們離類人智能還很遠(yuǎn)。最重要的是,創(chuàng)造人工智能的領(lǐng)先方法不像我們?cè)谧匀唤缰锌吹降哪菢?#xff0c;使用龐大的數(shù)據(jù)庫(kù)來(lái)學(xué)習(xí)模式識(shí)別。這與人類形成對(duì)比,人類擁有靈活的智力,允許我們只用少量樣本就能勝任。為了幫助推動(dòng)世界向前發(fā)展,一個(gè)新的挑戰(zhàn)——抽象和推理語(yǔ)料庫(kù)(ARC)——已經(jīng)提出,它可能會(huì)取代圖靈測(cè)試,成為人工智能的目標(biāo)。除此之外,隨著全球工程師在在線平臺(tái) Kaggle 上爭(zhēng)奪獎(jiǎng)項(xiàng),對(duì)人工智能社區(qū)的挑戰(zhàn)正迅速接近尾聲。
2019 年 11 月發(fā)表的名為“論智力的衡量標(biāo)準(zhǔn)”的 64 頁(yè)研究論文,概述了人工智能研究的歷史,一個(gè)新的視角和抽象與推理語(yǔ)料庫(kù)(ARC)。它是由資深深度學(xué)習(xí)研究員兼谷歌工程師弗朗索瓦·喬萊(Fran? ois Chollet)提出的。在書(shū)中,他認(rèn)為:
“ARC 可用于測(cè)量類似人類形式的一般流體智能,它可以在人工智能系統(tǒng)和人類之間進(jìn)行公平的一般智能比較?!?/p>
這很重要,因?yàn)榫拖裾跇?gòu)建的人工智能一樣,人類是非常面向目標(biāo)的。通過(guò)提供一個(gè)單一的努力目標(biāo),我們可以衡量我們的表現(xiàn),迭代,改進(jìn)并努力超越基準(zhǔn)。我們已經(jīng)在人工智能的其他領(lǐng)域看到了非常相似的結(jié)果;當(dāng) MovieLens 數(shù)據(jù)集發(fā)布時(shí),推薦系統(tǒng)實(shí)現(xiàn)了飛躍;圖像識(shí)別社區(qū)隨著 MNIST 和隨后的 ImageNet 的發(fā)展而繁榮。希望 ARC 可以成為更普遍的智能人工智能系統(tǒng)的火花。
本文的另一個(gè)重要成果是系統(tǒng)智能的定義(如下所示)。這個(gè)等式在這里有點(diǎn)難以解釋,但它可以解釋為"智力是學(xué)習(xí)者在涉及不確定性和適應(yīng)性的有價(jià)值的任務(wù)中將其經(jīng)驗(yàn)和先驗(yàn)知識(shí)轉(zhuǎn)化為新技能的速度。因此,最智能的系統(tǒng)只需要少量的經(jīng)驗(yàn),并根據(jù)這些經(jīng)驗(yàn)猜測(cè)在許多不同的情況下會(huì)有什么樣的結(jié)果。
喬萊對(duì)智力的定義。有趣的是,公式本身就需要很高的智力門(mén)檻來(lái)處理!
讓我們通過(guò)一個(gè)來(lái)自 ARC 的例子更容易地看到這一點(diǎn)。作為 ARC 中所有任務(wù)的標(biāo)準(zhǔn),我們從一些必須理解的例子開(kāi)始,然后歸納為一個(gè)測(cè)試用例。
任務(wù) 11:星際飛船建造者(好吧,他們并沒(méi)有真正的名字,但這更有趣)。這里的目標(biāo)是采用基本模式并圍繞它建造一艘“星際飛船”。這是通過(guò)將外部部分從中心向外延伸一個(gè)方塊,將中心部分向?qū)蔷€方向延伸兩個(gè)方塊來(lái)實(shí)現(xiàn)的。
在這個(gè)例子中,你必須用基本的圖案圍繞它們建造一艘“星際飛船”,注意基本的顏色。對(duì)于測(cè)試用例,只提供給你一張圖片(比如說(shuō),最左邊的那張),你必須猜測(cè)相鄰的那張。對(duì)于我們來(lái)說(shuō),看到這種模式并假設(shè)(猜測(cè))創(chuàng)建解決方案的下一步是什么是相對(duì)簡(jiǎn)單的,但建立一個(gè)人工智能來(lái)為一般情況做這件事是我們目前非常非常遠(yuǎn)的事情。
上面的例子相對(duì)簡(jiǎn)單,但是肯定有更復(fù)雜的。點(diǎn)擊這里提供的鏈接選擇“隨機(jī)任務(wù)”來(lái)嘗試一些挑戰(zhàn): 電弧測(cè)試界面 。如果你發(fā)現(xiàn)任何問(wèn)題特別難,請(qǐng)?jiān)谙旅娣窒砟愕慕Y(jié)果!感謝論文作者準(zhǔn)備了這個(gè)界面并允許它自由發(fā)表?;蛘?#xff0c;在這里查看所有示例。
但是是什么讓人工智能變得如此困難呢?我們可以考慮像這里的和一樣手動(dòng)編程每種情況。只需要一行日常語(yǔ)言就能表達(dá)的東西,卻需要幾十行代碼。
任務(wù) 1:打開(kāi)門(mén)戶。用英語(yǔ)直截了當(dāng)表達(dá)的東西,例如“用黃色填充綠色物體”,用代碼來(lái)表達(dá)相對(duì)復(fù)雜。
“用黃色填充綠色對(duì)象”的示例變?yōu)?
但這只是問(wèn)題的一面。如果需要,我們可以編寫(xiě)任意長(zhǎng)的代碼,但我們?cè)谶@里試圖解決的問(wèn)題是編寫(xiě)可以解決各種問(wèn)題的代碼,而不僅僅是我們手動(dòng)編程的問(wèn)題。
總的來(lái)說(shuō),對(duì)我們來(lái)說(shuō)似乎簡(jiǎn)單的東西來(lái)源于論文所描述的“人類先天的先驗(yàn)”。這種先驗(yàn)知識(shí)指的是我們用來(lái)處理概念的東西,比如物體是什么,對(duì)稱性是什么,或者排序什么東西意味著什么。任何系統(tǒng)都必須能夠?qū)W習(xí)這些,或者至少將它們預(yù)先編程,然后開(kāi)始將它們縫合在一起以找到解決方案。例如,我們可以編寫(xiě)關(guān)于對(duì)稱性意味著什么的函數(shù),或者我們可以創(chuàng)建一個(gè)能夠?qū)W習(xí)對(duì)稱特征的二維過(guò)濾器。
值得注意的是,在 ARC 的情況下,先驗(yàn)的數(shù)量保持在絕對(duì)最小值,這是使該數(shù)據(jù)集真正偉大的另一個(gè)因素。你可以將這與原始的圖靈測(cè)試進(jìn)行對(duì)比,在原始的圖靈測(cè)試中,計(jì)算機(jī)必須模仿人類。要做到這一點(diǎn),計(jì)算機(jī)必須對(duì)人類文化有充分的理解才能通過(guò),這與智力沒(méi)有直接關(guān)系。
讓這項(xiàng)任務(wù)變得非常棘手的另一個(gè)原因是,輸入量非常小,這意味著系統(tǒng)必須能夠從少量訓(xùn)練樣本中學(xué)習(xí)復(fù)雜的行為。出于這個(gè)原因,像深度學(xué)習(xí)這樣最受歡迎的技術(shù)并不適合這個(gè)問(wèn)題,因?yàn)樗鼈兺ǔP枰獢?shù)百萬(wàn)個(gè)訓(xùn)練樣本。最重要的是,它們需要用于訓(xùn)練它們的數(shù)據(jù)和它們必須解決的問(wèn)題之間的共性,這對(duì)于 ARC 來(lái)說(shuō)并不成立。
這就是 ARC 真正有趣的地方。它正在推動(dòng)邊界,迫使研究人員提出創(chuàng)新的系統(tǒng)來(lái)解決前所未有的普遍問(wèn)題。
論文發(fā)布后,在線平臺(tái) Kaggle 發(fā)布了一個(gè)競(jìng)賽:抽象和推理挑戰(zhàn)。在這場(chǎng)比賽中,工程師們面臨的挑戰(zhàn)是在 ARC 中描述的任務(wù)上獲得盡可能好的分?jǐn)?shù)。我們不太可能在剩下的一個(gè)月里解決人工智能問(wèn)題,但我們正在探索一些有趣的問(wèn)題。迄今為止的主要嘗試包括:
- 卷積神經(jīng)網(wǎng)絡(luò):乍看之下,CNN(處理圖像以告訴你是否有貓的同一個(gè)系統(tǒng))很適合這個(gè)問(wèn)題,因?yàn)樗鼈兪菫樘幚矶S圖像數(shù)據(jù)而建立的,可以建立強(qiáng)大的模式檢測(cè)器。但是如前所述,這些系統(tǒng)不能很好地解決問(wèn)題,性能也很差。
- 細(xì)胞自動(dòng)機(jī):通過(guò)定義一套簡(jiǎn)單的規(guī)則,我們可以使用細(xì)胞自動(dòng)機(jī)產(chǎn)生復(fù)雜的行為。如果你從未聽(tīng)說(shuō)過(guò)它們,一定要查一下——它們超級(jí)酷!雖然到目前為止的探索大多是好玩的,但思考和觸及智能的核心是很有趣的。
- 決策樹(shù):ML 工程師的另一個(gè)拿手好戲是決策樹(shù)。通過(guò)一些聰明的特征工程,有可能產(chǎn)生一些正確的答案,但是很難看出它如何一般化。
- 遺傳算法:從一些關(guān)于如何轉(zhuǎn)換圖像的函數(shù)(特定領(lǐng)域語(yǔ)言,DSL)開(kāi)始,遺傳算法采用一些隨機(jī)函數(shù)并進(jìn)化這些函數(shù),類似于(在某種意義上)地球上生命的進(jìn)化。有了一個(gè)定義良好的函數(shù)列表和一個(gè)關(guān)于什么“看起來(lái)不錯(cuò)”的強(qiáng)烈想法,這種方法似乎可以很好地執(zhí)行。
您可以在 Kaggle 論壇上關(guān)注所有這些解決方案的更新,或者等到比賽結(jié)束后查看頂級(jí)選手的評(píng)論。
這并不是貶低當(dāng)前技術(shù)的力量。深度學(xué)習(xí)給了我們像自動(dòng)駕駛汽車(chē)和象棋大師這樣令人驚嘆的技術(shù)。所有這些都是在一個(gè)龐大的經(jīng)濟(jì)體的背后發(fā)展起來(lái)的,這個(gè)經(jīng)濟(jì)體渴望通過(guò)能夠像人類一樣完成非常具體的任務(wù)的系統(tǒng)來(lái)實(shí)現(xiàn)自動(dòng)化。經(jīng)濟(jì)需求和強(qiáng)大的社區(qū)解釋了為什么這些系統(tǒng)如此流行和被大量研究。這篇論文提醒我們的是,還有其他值得探索的方向。讓我們開(kāi)始吧!
元胞自動(dòng)機(jī)求解門(mén)戶打開(kāi)任務(wù)。信用: arseny-n 。
原文:https://towardsdatascience.com/ais-phoenix-project-moment-b51f581711d8?source=collection_archive---------19-----------------------
艾的鳳凰計(jì)劃時(shí)刻
2018 年晚些時(shí)候,在亞利桑那州一段荒涼的雙車(chē)道高速公路上,伊萊恩·赫爾茨貝格贏得了她從未想要的榮譽(yù)。
她成為第一個(gè)被自動(dòng)駕駛汽車(chē)撞死的行人。
當(dāng)汽車(chē)花費(fèi) 290 到 520 美元的小財(cái)富時(shí)
她和 122 年前的一個(gè)女人布麗奇特·德里斯科爾有著相似的悲慘命運(yùn),她于 1896 年死于一項(xiàng)早期實(shí)驗(yàn)技術(shù)之手,當(dāng)時(shí)她正在倫敦的傍晚散步:
一輛車(chē)。
普通大眾喜歡把人工智能看作超人,在某種程度上他們是超人。他們可以擊敗世界上最好的圍棋選手或 99%的 DOTA 2 選手,這是一款非常復(fù)雜的實(shí)時(shí)戰(zhàn)略游戲。
但這并不意味著它們是完美的。即使今天最先進(jìn)的人工智能也會(huì)犯嚴(yán)重的錯(cuò)誤,包括大多數(shù)人會(huì)發(fā)現(xiàn)很容易克服的錯(cuò)誤。
當(dāng)我們把人工智能從棋盤(pán)游戲和視頻游戲的狹窄領(lǐng)域中拿出來(lái),放到現(xiàn)實(shí)世界中時(shí),它們面臨著一系列永無(wú)止境的邊緣情況和意想不到的場(chǎng)景。這一點(diǎn)在高風(fēng)險(xiǎn)的自動(dòng)駕駛汽車(chē)領(lǐng)域表現(xiàn)得最為明顯,在這個(gè)領(lǐng)域,每一個(gè)錯(cuò)誤都可能意味著生死之別。
Lyft 無(wú)人駕駛汽車(chē)部門(mén)研發(fā)負(fù)責(zé)人呂克·文森特(Luc Vincent)表示,無(wú)人駕駛汽車(chē)可能出現(xiàn)的問(wèn)題幾乎是無(wú)限的。
Lyft 自動(dòng)駕駛汽車(chē)測(cè)試
Lyft 發(fā)現(xiàn),當(dāng)他們被其他司機(jī)超車(chē)時(shí),他們的汽車(chē)正在剎車(chē)。另一家自動(dòng)駕駛汽車(chē)公司 Zoox 發(fā)現(xiàn)他們的汽車(chē)無(wú)法處理黃色的左手轉(zhuǎn)向燈,因?yàn)榇蠖鄶?shù)轉(zhuǎn)向燈都是綠色的。他們不得不請(qǐng)藝術(shù)家來(lái)繪制黃色的轉(zhuǎn)向信號(hào),并加載到他們的模擬軟件中。很快,Zoox 的汽車(chē)在現(xiàn)實(shí)世界中看到它們的能力有了很大提高,但無(wú)論你做什么,總會(huì)出現(xiàn)另一種情況。
“這有點(diǎn)像打地鼠?!澳憬鉀Q了一個(gè)問(wèn)題,另一個(gè)問(wèn)題可能會(huì)出現(xiàn),”應(yīng)用直覺(jué)公司首席執(zhí)行官合撒兒·尤尼斯說(shuō),根據(jù) CNN 的優(yōu)秀文章關(guān)于這個(gè)“世代型技術(shù)挑戰(zhàn)”所面臨的無(wú)盡困難
著名機(jī)器人專家、麻省理工學(xué)院榮譽(yù)退休教授羅德尼·布魯克斯給寫(xiě)了一篇非常長(zhǎng)且詳細(xì)的帖子,解釋了為什么他認(rèn)為無(wú)人駕駛汽車(chē)比幾乎所有人想象的都要遙遠(yuǎn)。他列舉了幾十個(gè)邊緣案例:
- 如果你沿著一條狹窄的單行道走,這條單行道被建筑擋住了,那么違反法律回到這條單行道上可以嗎?
- 這輛車(chē)能應(yīng)付青少年惡作劇和大喊沖突的命令嗎?
- 汽車(chē)能理解警察或路邊工作人員的手勢(shì)嗎?
- 汽車(chē)能識(shí)別別人貼的假路牌還是損壞的路牌?
所有這些場(chǎng)景對(duì)今天的人工智能來(lái)說(shuō)都非常困難,因?yàn)樗鼈儧](méi)有更深層次的上下文意識(shí)或通用抽象推理。情境人工智能是人工智能研究的前沿,這就是為什么它得到了像 DARPA 這樣的未來(lái)主義組織的資助。
DARPA 可解釋人工智能框架
讓人類如此神奇的是,我們善于從其他問(wèn)題中抽象出解決方案,來(lái)解決我們從未見(jiàn)過(guò)的全新問(wèn)題。我們可以研究物理定律、運(yùn)動(dòng)定律和慣性定律,建造一艘前所未有的火箭,并首次在月球著陸。
一個(gè)卷積神經(jīng)網(wǎng)絡(luò) (CNN)可以研究火箭的例子,但如果沒(méi)有現(xiàn)成的解決方案來(lái)建造火箭,那么它就不能發(fā)明一個(gè)。一個(gè)從未見(jiàn)過(guò)鴨子的 CNN 不會(huì)突然意識(shí)到鴨子的存在。
無(wú)人駕駛汽車(chē)推動(dòng)了可能性的極限。關(guān)于我們現(xiàn)在已經(jīng)有自動(dòng)駕駛汽車(chē)自信地行駛在紐約市普通街道上的瘋狂樂(lè)觀的預(yù)測(cè)正在讓位于現(xiàn)實(shí)檢驗(yàn)意識(shí),這可能比我們想象的要長(zhǎng)得多。
在一個(gè)層面上,我們遇到了深度學(xué)習(xí)和強(qiáng)化學(xué)習(xí)的局限性。在最近的人工智能最大的會(huì)議之一 NeurIps 上,一些業(yè)界最耀眼的明星,包括蒙特利爾人工智能研究所 Mila 的主任 Yoshua Bengio,就人工智能的現(xiàn)狀給出了一個(gè)發(fā)人深省的信息:
“我們有以非常狹窄的方式學(xué)習(xí)的機(jī)器,”本吉奧說(shuō)。“他們需要比人類智能例子多得多的數(shù)據(jù)來(lái)學(xué)習(xí)一項(xiàng)任務(wù),他們?nèi)匀粫?huì)犯愚蠢的錯(cuò)誤。”
機(jī)器人專家羅德尼甚至走得更遠(yuǎn),他說(shuō),要擁有一輛真正的4 級(jí)或 5 級(jí)自動(dòng)駕駛汽車(chē),這意味著汽車(chē)不需要輪子,可以在除了最糟糕的天氣條件之外的任何情況下行駛,并做出自己的決定,將需要某種接近人工通用智能的東西(AGI)。僅僅將一堆互不相連的神經(jīng)網(wǎng)絡(luò)縫合在一起,并希望更高形式的理解會(huì)神奇地出現(xiàn)是不夠的。
要讓一輛自動(dòng)駕駛汽車(chē)在現(xiàn)實(shí)世界的混亂中工作,在司機(jī)按喇叭和插隊(duì)的情況下,在坑坑洼洼、破損的交通燈或貼滿貼紙的街道標(biāo)志的情況下,我們很有可能無(wú)法在今天的人工智能藝術(shù)中實(shí)現(xiàn)這一目標(biāo)?,F(xiàn)在,我們是否能利用神經(jīng)網(wǎng)絡(luò)的魔力讓自動(dòng)駕駛汽車(chē)發(fā)揮作用,或者我們是否需要新的算法,將在全球頂尖 R&D 團(tuán)隊(duì)的實(shí)驗(yàn)室中決定,因?yàn)樗麄冋诟?jìng)相尋找解決方案。
但是如果我們仔細(xì)觀察,自動(dòng)駕駛汽車(chē)的世界向我們展示了一個(gè)更加基本和根本的問(wèn)題,這個(gè)問(wèn)題正在摧毀數(shù)據(jù)科學(xué)團(tuán)隊(duì),而且我們現(xiàn)在就可以解決這個(gè)問(wèn)題。
87%的數(shù)據(jù)科學(xué)項(xiàng)目從未投入生產(chǎn)是有原因的。
今天,大多數(shù)數(shù)據(jù)科學(xué)團(tuán)隊(duì)都不知道如何處理邊緣情況,當(dāng)我們的模型遇到現(xiàn)實(shí)生活時(shí),這些情況就像野生兔子一樣成倍增加。
一個(gè) ConvNet 看到左邊的圖像是一個(gè) 45 英里每小時(shí)的標(biāo)志!
自我學(xué)習(xí)的算法有各種各樣的場(chǎng)景,只是我們無(wú)法預(yù)見(jiàn),直到它們迎面而來(lái)。如果你的視覺(jué)檢測(cè)系統(tǒng)有 97%的準(zhǔn)確率,但檢測(cè)到一個(gè)涂鴉覆蓋的停車(chē)標(biāo)志是 45 英里/小時(shí)的標(biāo)志,它的準(zhǔn)確率可能為零,因?yàn)橛腥藭?huì)受傷或死亡。
即使是世界上最準(zhǔn)確、最成功的 CNN,也常常在凌亂的現(xiàn)實(shí)世界中掙扎。麻省理工學(xué)院和 IBM 剛剛推出了 ObjectNet 數(shù)據(jù)集來(lái)展示這些算法在面對(duì)損壞的東西,或部分隱藏的東西,或以奇怪的角度放置的東西時(shí)表現(xiàn)得有多糟糕。該數(shù)據(jù)集花了三年時(shí)間整合,一些最先進(jìn)的對(duì)象檢測(cè)模型的準(zhǔn)確率從 ImageNet 上的 97%下降到 ObjectNet 上的 50–55%。
提供圖像識(shí)別功能的 ObjectNet 圖像
僅僅測(cè)試準(zhǔn)確性和收工已經(jīng)不夠了。準(zhǔn)確性分?jǐn)?shù)標(biāo)志著一個(gè)模型的最低能力。這些分?jǐn)?shù)就像你放在簡(jiǎn)歷上為你在新工作中擔(dān)保的兩個(gè)人。它們表明你并沒(méi)有那么無(wú)能,以至于你在這個(gè)世界上找不到兩個(gè)人來(lái)說(shuō)你的好話,僅此而已。
但是,要讓像自動(dòng)駕駛汽車(chē)這樣復(fù)雜的東西成為現(xiàn)實(shí),我們需要一種方法來(lái)解決快速擴(kuò)散的邊緣案例“打地鼠”的問(wèn)題。要做到這一點(diǎn),我們需要超越的整體精度,并轉(zhuǎn)向?qū)吘壈咐木?em>進(jìn)行自動(dòng)化測(cè)試。我們可以通過(guò)傳統(tǒng)的軟件編程來(lái)做到這一點(diǎn)。
人工智能開(kāi)發(fā)有其獨(dú)特的挑戰(zhàn),但在我們?nèi)绾卧谝恍┳罹⒌木幊虉F(tuán)隊(duì)上開(kāi)發(fā)軟件與數(shù)據(jù)科學(xué)團(tuán)隊(duì)現(xiàn)在和未來(lái)如何開(kāi)發(fā)人工智能之間有很多重疊。
要理解為什么你只需要知道一點(diǎn)點(diǎn)編程的歷史。
DevOps 是一個(gè)大問(wèn)題的答案,當(dāng)我們的應(yīng)用程序開(kāi)始變得太大太復(fù)雜,舊的編程方法無(wú)法熟練處理時(shí),這個(gè)問(wèn)題才浮出水面。早期的計(jì)算機(jī)應(yīng)用程序比今天多方面的應(yīng)用程序簡(jiǎn)單。它們主要是由公司開(kāi)發(fā)團(tuán)隊(duì)為一個(gè)狹窄的用例構(gòu)建的。有了這些隱藏在公司防火墻后面的應(yīng)用程序,瀑布模型運(yùn)行得非常好。只有幾千個(gè)用戶會(huì)接觸那個(gè)應(yīng)用程序,所以你可以把邊緣情況保持在最低限度。
但是互聯(lián)網(wǎng)改變了一切。隨著上億用戶使用一個(gè)應(yīng)用程序,越來(lái)越多的錯(cuò)誤會(huì)出現(xiàn),而在嚴(yán)格控制的環(huán)境中只有幾千名用戶。DevOps 來(lái)救援了。它使互聯(lián)網(wǎng)規(guī)模的應(yīng)用成為可能。
AI 再次改變游戲。
有了人工智能,我們面臨著未知事物的指數(shù)級(jí)增長(zhǎng)。
修復(fù)它的關(guān)鍵是單元測(cè)試。
我們可以把每一個(gè)邊緣案例看作是一個(gè)需要自動(dòng)化單元測(cè)試的 bug。
敏捷和 DevOps 風(fēng)格編程的興起教會(huì)了我們?nèi)绾巫詣?dòng)化測(cè)試,因?yàn)閺?fù)雜的軟件在廣泛分布的編程團(tuán)隊(duì)的手中經(jīng)歷了無(wú)數(shù)的變化。軟件團(tuán)隊(duì)經(jīng)常發(fā)現(xiàn),由于程序員簽入依賴于損壞的庫(kù)的代碼,或者由于程序員剪切并粘貼舊代碼而沒(méi)有意識(shí)到它有缺陷,一個(gè)被壓制的網(wǎng)絡(luò)錯(cuò)誤不知何故在一百次修訂后又回來(lái)了。人工智能團(tuán)隊(duì)將需要開(kāi)發(fā)自己的自動(dòng)化邊緣案件處理器,以處理欺詐檢測(cè)系統(tǒng),每當(dāng)有人前往法國(guó)或在阿爾伯克基使用 ATM 機(jī)時(shí),這些系統(tǒng)就會(huì)開(kāi)始得到誤報(bào)。
當(dāng)我們調(diào)整算法的參數(shù)或重新訓(xùn)練新數(shù)據(jù)時(shí),它突然開(kāi)始出錯(cuò),人工智能團(tuán)隊(duì)將不得不建立特殊的測(cè)試,以確保這些“錯(cuò)誤”不會(huì)突然出現(xiàn)。自動(dòng)駕駛汽車(chē)團(tuán)隊(duì)可能會(huì)創(chuàng)建一個(gè) CNN,它擅長(zhǎng)處理憤怒的人類司機(jī)切斷他們的道路,但如果它突然又開(kāi)始丟失貼有貼紙的街道標(biāo)志,那也沒(méi)什么關(guān)系。
為了構(gòu)建一個(gè)更好的單元測(cè)試,工程團(tuán)隊(duì)將需要掌握機(jī)器學(xué)習(xí)操作(MLOps) 并學(xué)習(xí)構(gòu)建一個(gè)良好的 MLOps 管道,可以快速發(fā)現(xiàn)并消除新的 bug。
在我為紅帽 OpenShift Commons 的演講中,我談到了如何為人工智能團(tuán)隊(duì)建立一個(gè) QA,我現(xiàn)在稱之為人工智能紅隊(duì)。這是一個(gè)由快速響應(yīng)的編碼人員、工程師和數(shù)據(jù)科學(xué)家組成的團(tuán)隊(duì),他們尋找人工智能異常的短期分類解決方案和長(zhǎng)期解決方案。這是一個(gè)非常精英的團(tuán)隊(duì),很像一個(gè)白帽黑客隊(duì),他們的工作是闖入網(wǎng)絡(luò),使他們免受黑帽的攻擊。
AI 紅隊(duì)的工作就是墨菲定律的答案。他們專門(mén)破解 AI,再修復(fù)。他們負(fù)責(zé)找出未知的未知,并在傷害他人或傷害底線之前將它們公之于眾。
在不太遙遠(yuǎn)的將來(lái),我們將需要世界各地?cái)?shù)以百萬(wàn)計(jì)的紅色團(tuán)隊(duì)構(gòu)建他們自己的 ObjectNets,并以真正的開(kāi)源精神共享它們,以真正創(chuàng)造出可以安全地倒在單行道上或穿越暴雨和大雪的汽車(chē)。
把這當(dāng)成是給 AI 的鳳凰計(jì)劃。
如果你不知道這本書(shū),你應(yīng)該知道。這是一本關(guān)于軟件和業(yè)務(wù)轉(zhuǎn)型的非常好的讀物。任何一本書(shū),只要能把軟件開(kāi)發(fā)和業(yè)務(wù)流程升級(jí)變成一次有趣的、超級(jí)娛樂(lè)性的旅行,書(shū)中充滿了我們?cè)诂F(xiàn)實(shí)世界中似乎都認(rèn)識(shí)的人物,都是非常特別的。這本書(shū)有助于推廣 DevOps 軟件開(kāi)發(fā)模型,但不僅如此,它還展示了我們?nèi)绾瓮ㄟ^(guò)在組織的每個(gè)級(jí)別上以不同的方式思考問(wèn)題來(lái)解決過(guò)去的問(wèn)題。
在人工智能時(shí)代,我們將不得不再次轉(zhuǎn)變我們的理解和方法。
人工智能帶來(lái)了新的挑戰(zhàn),這是我們手動(dòng)編寫(xiě)所有軟件并手動(dòng)教給它道路規(guī)則時(shí)從未面臨過(guò)的挑戰(zhàn)。今天的軟件正在自學(xué)道路規(guī)則。當(dāng)它在紅燈處右轉(zhuǎn)時(shí),最先進(jìn)的人工智能團(tuán)隊(duì)已經(jīng)準(zhǔn)備好了。
現(xiàn)在是艾的鳳凰計(jì)劃的時(shí)刻。
為了建設(shè)未來(lái),有時(shí)我們只需要回顧過(guò)去。
############################################
作者 【工程師】 親博者播客我還運(yùn)營(yíng)了 實(shí)用 AI 倫理聯(lián)盟 和 AI 基礎(chǔ)設(shè)施聯(lián)盟 ,兩個(gè)倡導(dǎo)安全透明 AI 的開(kāi)放社區(qū)。**
############################################
這篇文章包括亞馬遜的會(huì)員鏈接。
############################################
原文:https://towardsdatascience.com/akaike-information-criteria-942d1f554537?source=collection_archive---------19-----------------------
我們所有人都曾用 AIC 來(lái)選擇模特。這個(gè)博客是關(guān)于 AIC 背后的想法,它是什么,為什么它被用于模型選擇。雖然有人告訴我們?nèi)绾斡?jì)算 AIC,但至少?zèng)]人告訴我為什么要這么做背后的邏輯——這篇博客將對(duì)此進(jìn)行闡述。
AIC 是對(duì)樣本外誤差的估計(jì)。AIC 以信息論為基礎(chǔ)。他稱之為熵最大化原理,最小化 AIC 相當(dāng)于最大化熱力學(xué)系統(tǒng)的熵。因此,在信息論的語(yǔ)言中,我們可以說(shuō),當(dāng)編碼一個(gè)模型時(shí)(我們永遠(yuǎn)找不到確切的模型,一些信息在表示數(shù)據(jù)生成的過(guò)程中丟失了。
AIC 測(cè)量了相對(duì)信息損失。由于我們沒(méi)有確切的模型,我們無(wú)法測(cè)量確切的損失。因此,我們測(cè)量不同模型之間的相對(duì)損失(我們必須從中選擇我們的模型)。如果我們有 3 個(gè) AIC 值分別為 100、102 和 110 的模型,那么第二個(gè)模型的 exp((100-102)/2)= 0.368 倍是第一個(gè)模型的概率,以最大限度地減少信息損失。同樣,第三個(gè)模型的概率是第一個(gè)模型的 0.007 倍,以最大限度地減少信息損失。
AIC 由 **2 x 參數(shù)數(shù)量-2 log(似然)**給出
當(dāng)選擇模型(例如多項(xiàng)式函數(shù))時(shí),我們選擇具有最小 AIC 值的模型。或者,如果我們可以選擇前 2-3 個(gè)模型,收集更多的數(shù)據(jù),并選擇 AIC 最小的一次。這個(gè)博客是關(guān)于——這個(gè) AIC 公式從何而來(lái)?
在 AIC,我們?cè)噲D最小化模型和地面真實(shí)函數(shù)之間的 KL 差異。AIC 是對(duì)代理函數(shù)估計(jì)的計(jì)算。因此,最小化 AIC 類似于最小化 KL 與地面真實(shí)值的偏離,從而最小化樣本外誤差。下圖顯示了 AIC 的推導(dǎo)過(guò)程。
**圖一。**推導(dǎo)第一部分
**圖二。**推導(dǎo)第二部分
貝葉斯信息標(biāo)準(zhǔn)(BIC)的計(jì)算類似于 AIC。BIC 用 2 ln(n)k 代替 2k,這些被稱為罰項(xiàng)。有爭(zhēng)議的是,如果真實(shí)模型存在于模型組中,BIC 選擇概率為 1 的真實(shí)模型,給定 n 趨于無(wú)窮大。由于我們?cè)诤蜻x模型集中從來(lái)沒(méi)有真正的真實(shí)模型,這個(gè)屬性并沒(méi)有被高度重視。此外,AIC 最大限度地降低了選擇一個(gè)非常糟糕的模型的風(fēng)險(xiǎn)。
參考 1。維基百科 AIC 頁(yè)面
2。AIC 的衍生
原文:https://towardsdatascience.com/albert-vectorization-with-tensorflow-hub-c6b892ed7ed4?source=collection_archive---------22-----------------------
BERT 的出現(xiàn)打破了 NLP 的傳統(tǒng)范式。下游的模型構(gòu)建現(xiàn)在是從一個(gè)以語(yǔ)言知識(shí)為基礎(chǔ)的模型開(kāi)始,而不是從零開(kāi)始。ALBERT 可以被稱為 lite BERT,它使用轉(zhuǎn)換器-編碼器架構(gòu),參數(shù)數(shù)量大大減少。在本文中,詞匯大小也是 30K,與最初的 BERT 中使用的一樣。ALBERT 區(qū)別于 BERT 的三個(gè)主要方面是分解嵌入?yún)?shù)化、跨層參數(shù)共享和句子順序預(yù)測(cè)。
當(dāng)人們?cè)噲D簡(jiǎn)單地放大模型的隱藏尺寸時(shí),BERT like 模型可能提供質(zhì)量差的性能。諸如因子分解嵌入?yún)?shù)化之類的參數(shù)縮減技術(shù)用于將隱藏層的大小與詞匯嵌入的大小分開(kāi),這使得在不顯著增加參數(shù)大小的情況下增加隱藏大小變得容易。而跨層參數(shù)共享防止參數(shù)隨著網(wǎng)絡(luò)的深度而增長(zhǎng)。因此,這兩種技術(shù)都顯著減少了傳統(tǒng) BERT 的參數(shù)數(shù)量,而沒(méi)有惡化性能和提高參數(shù)效率。通過(guò)引入句子順序預(yù)測(cè)的自監(jiān)督損失(SOP ), ALBERT 的性能得到進(jìn)一步改善。
在本文中,我們將使用 tensorflow-hub 模塊的 keras 層格式獲得相應(yīng)文本的 ALBERT 向量。
我們將使用 tensorflow keras API 制作一個(gè)模型,它將為文本輸入提供 ALBERT 嵌入。環(huán)境設(shè)置包括安裝所需的庫(kù)和獲取所需的 tensorflow-hub 模塊以獲得 ALBERT vectors。使用的庫(kù)有:
我們將使用 TF2 保存的艾伯特模型格式。您可以直接使用 tfhub 上的模塊進(jìn)行推斷。但是對(duì)于生產(chǎn)場(chǎng)景,最好將模塊放在本地。為此,我們需要首先獲取模塊的 zip 文件并將其解壓縮。
我們將把 ALBERT 模塊作為 keras 層導(dǎo)入。
棘手的是,艾伯特模塊不能直接輸入文本。它需要經(jīng)過(guò)一個(gè)預(yù)處理層。
首先,我們將使用 ALBERT tokenizer 對(duì)輸入文本進(jìn)行分詞,它基于一個(gè)句子片斷分詞器,即子詞級(jí)分詞器。它是一個(gè)數(shù)據(jù)驅(qū)動(dòng)的標(biāo)記器,用來(lái)處理詞匯表之外的單詞。因?yàn)槲覀冊(cè)诿看屋斎霑r(shí)只有一個(gè)文本,所以句子的標(biāo)記列表看起來(lái)像[“[CLS]”]+標(biāo)記+ [“[SEP]”]。
例如,文本“車(chē)身由金屬制成,具有高張力”會(huì)生成一個(gè)令牌列表,如下所示:
現(xiàn)在,我們需要 3 個(gè)輸入序列,可以饋入艾伯特模塊。
- 標(biāo)記 id:用于從 ALBERT vocab 字典中提取的句子中的每個(gè)標(biāo)記。
- mask ids:for each token,用于屏蔽僅用于序列填充的標(biāo)記(因此每個(gè)序列都有固定的長(zhǎng)度)。
- Segment ids 表示一個(gè)句子序列(我們這里的例子),1 表示序列中有兩個(gè)句子。
現(xiàn)在我們已經(jīng)準(zhǔn)備好了所需的輸入處理。我們將使用 tf keras API 建立一個(gè)模型,它將接受處理后的輸入,并獲得文本的 ALBERT 向量。輸出艾伯特矢量包含 2 個(gè)矢量,一個(gè)是匯集輸出和序列輸出。pooled_output 是維度 1x768 的句子嵌入,序列輸出是維度 1x(token_length)x768 的令牌級(jí)嵌入。
制作 keras 模型的想法是通過(guò)添加所需的層和參數(shù),輕松地將其擴(kuò)展到任何分類模型。
現(xiàn)在所有的艱苦工作都完成了。將只需要一個(gè)推理函數(shù)來(lái)獲得文本的相應(yīng)艾伯特嵌入。
為了快速檢查句子嵌入的質(zhì)量,讓我們?cè)谝恍〗M示例上運(yùn)行它,并使用它們對(duì)應(yīng)的歸一化句子嵌入向量的點(diǎn)積來(lái)檢查每對(duì)的句子相似性得分。
[## sambit 9238/深度學(xué)習(xí)
此時(shí)您不能執(zhí)行該操作。您已使用另一個(gè)標(biāo)簽頁(yè)或窗口登錄。您已在另一個(gè)選項(xiàng)卡中注銷,或者…
github.com](https://github.com/sambit9238/Deep-Learning/tree/master/sarcasm_classifier/albert_tfhub) [## 從伯特到阿爾伯特:預(yù)訓(xùn)練的蘭格模型
預(yù)訓(xùn)練語(yǔ)言模型的研究進(jìn)展
medium.com](https://medium.com/doxastar/from-bert-to-albert-pre-trained-langaug-models-5865aa5c3762) [## ALBERT:一個(gè)用于語(yǔ)言表達(dá)自我監(jiān)督學(xué)習(xí)的 Lite BERT
自從一年前 BERT 問(wèn)世以來(lái),自然語(yǔ)言研究已經(jīng)采用了一種新的范式,利用了大量的…
ai.googleblog.com](https://ai.googleblog.com/2019/12/albert-lite-bert-for-self-supervised.html) [## 谷歌的 NLP 驅(qū)動(dòng)的預(yù)訓(xùn)練方法 ALBERT 更精簡(jiǎn)&更刻薄
自然語(yǔ)言處理(NLP)是新興技術(shù)中最多樣化的領(lǐng)域之一。去年,搜索引擎…
analyticsindiamag.com](https://analyticsindiamag.com/googles-nlp-powered-pretraining-method-albert-is-leaner-meaner/) [## 視覺(jué)論文摘要:阿爾伯特(A Lite BERT)
考慮下面給出的一個(gè)句子。作為人類,當(dāng)我們遇到“蘋(píng)果”這個(gè)詞時(shí),我們可以:聯(lián)想“蘋(píng)果”這個(gè)詞…
amitness.com](https://amitness.com/2020/02/albert-visual-summary/)
原文:https://towardsdatascience.com/alexnet-8b05c5eb88d4?source=collection_archive---------18-----------------------
照片由好股票照片
2012 年秋季 9 月,AlexNet 首次參加了 ImageNet 大規(guī)模視覺(jué)識(shí)別挑戰(zhàn)賽(ILSVRC),并展示了 GPU 在深度學(xué)習(xí)方面的異常實(shí)力。點(diǎn)燃圖像深度學(xué)習(xí)整個(gè)領(lǐng)域的火花是這樣的。由 Alex Krizhevsky 與當(dāng)今深度學(xué)習(xí)的大腕 Ilya Sutskever 和 Geoffrey Hinton 一起創(chuàng)建。這是任何進(jìn)入深度學(xué)習(xí)領(lǐng)域的人閱讀的第一篇論文。
所以,讓我們回顧一下這篇論文,看看我們?cè)鯓硬拍苤匦聞?chuàng)造,使它重現(xiàn)往日的輝煌。
來(lái)源:https://papers . nips . cc/paper/4824-imagenet-class ification-with-deep-convolutionary-neural-networks . pdf
由于網(wǎng)絡(luò)設(shè)計(jì)時(shí) GPU 內(nèi)存不足,因此必須通過(guò)結(jié)合 2 個(gè) GPU 來(lái)訓(xùn)練。
- 我們的輸入是 224x224x3 的圖片。(論文中給出的是 150,528 維,有點(diǎn)混亂)
- 接下來(lái),執(zhí)行 96 個(gè) 11×11的卷積(今天,沒(méi)有看到任何網(wǎng)絡(luò)采用如此大的卷積),步長(zhǎng)為 4 。然后,響應(yīng)規(guī)范化(稍后解釋)和池應(yīng)用于層外。在這一層之后,網(wǎng)絡(luò)分裂成兩個(gè)相同的主干,直到完全連接。這樣設(shè)計(jì)是為了考慮 GPU 的內(nèi)存需求。
- 接下來(lái)是 256 個(gè) 5x5 的濾波器,每個(gè)濾波器然后再次被響應(yīng)歸一化(稍后解釋)并被匯集。
- 第三、第四、第五層與 384 個(gè)內(nèi)核相同,每個(gè)內(nèi)核為 3×3。
- 由于這里內(nèi)存的限制,作者不得不將 4096 個(gè)神經(jīng)元分成兩部分,每部分 2048 個(gè)。每個(gè)部分都從兩個(gè)主干獲得數(shù)據(jù)。
- 當(dāng)從兩個(gè)莖獲得數(shù)據(jù)時(shí),再次重復(fù)完全連接的層
- 最后,我們輸入 1000 個(gè)神經(jīng)元的密集層,即 ImageNet 中的類的數(shù)量。
網(wǎng)絡(luò)的成功在于他們用過(guò)的伎倆。
這是他們使用的巧妙伎倆之一。
什么是局部響應(yīng)正?;?#xff1f;
我們先來(lái)看看 ReLU。
ReLU(x) = max(0,x)
ReLU 最好的一點(diǎn)是,即使極少量的訓(xùn)練樣本有一些激活,也會(huì)有學(xué)習(xí)。但是,缺點(diǎn)是它們是無(wú)限的。因此,他們控制他們的權(quán)重,并且,為了產(chǎn)生更好的特性,我們使用局部響應(yīng)標(biāo)準(zhǔn)化。
來(lái)源:https://papers . nips . cc/paper/4824-imagenet-class ification-with-deep-convolutionary-neural-networks . pdf
這個(gè)公式乍一看很?chē)樔?#xff0c;所以,我們來(lái)理解一下。
首先,在求和算子中,存在激活,我們對(duì)其求平方以消除正負(fù)效應(yīng)。
現(xiàn)在,讓我們來(lái)看看,求和運(yùn)算符的范圍是什么,給定一個(gè) n ,它在其左側(cè)迭代 n/2,在其右側(cè)迭代N/2,同時(shí)考慮邊界,即 0 和 N-1。
這進(jìn)一步乘以因子 α ,以減少其與分子相比的值,從而保持分子中的激活值(如果 α 高,則分子中的激活將減少,從而導(dǎo)致漸變消失,如果太低,將導(dǎo)致漸變爆炸)。
增加 k 是為了防止被零除的錯(cuò)誤。
最后,將 β 作為一個(gè)指數(shù)來(lái)決定該局部響應(yīng)對(duì)所討論的激活的影響,較高的 β 將更多地懲罰對(duì)其鄰居的激活,而較低的 β 將不會(huì)對(duì)其鄰居的所討論的激活產(chǎn)生太多影響。
因此,局部反應(yīng)標(biāo)準(zhǔn)化有助于我們找出那些對(duì)其鄰居表現(xiàn)更好的激活。這也有助于提高網(wǎng)絡(luò)的效率,因?yàn)橐恍┥窠?jīng)元將充當(dāng)網(wǎng)絡(luò)的核心,所以計(jì)算將會(huì)很快。
此外,它有助于減少冗余特征,假設(shè)許多相鄰神經(jīng)元具有高值,則它們將通過(guò)局部響應(yīng)歸一化來(lái)歸一化,從而抑制冗余的連續(xù)特征。
因此,局部反應(yīng)正?;苍谙噜徤窠?jīng)元之間產(chǎn)生競(jìng)爭(zhēng),以更好地學(xué)習(xí)將自己與鄰近的其他神經(jīng)元區(qū)分開(kāi)來(lái)。所以,你可以稱之為競(jìng)爭(zhēng)正?;?/strong>。
局部響應(yīng)標(biāo)準(zhǔn)化不再使用,因?yàn)槲覀兏矚g批量標(biāo)準(zhǔn)化,它在批量水平上工作,以消除內(nèi)部協(xié)變量的變化。
與不可訓(xùn)練并且沒(méi)有正則化效果的局部響應(yīng)歸一化相比,批量歸一化是可訓(xùn)練的并且具有正則化效果。
這是他們用過(guò)的下一個(gè)酷招。
通常,我們使用非重疊池,如下所示:
圖一(來(lái)源:阿布舍克·維爾馬)
但是,在 AlexNet 中,使用了重疊池。
圖二(來(lái)源:阿布舍克·維爾馬)
我們來(lái)了解一下背后的直覺(jué)。
照片由邁克爾·達(dá)姆在 Unsplash 上拍攝
給定一幅圖像,我們推斷出圖像中物體的形狀和邊界,因?yàn)檫吔绲膬蛇呌忻黠@的區(qū)別。這也有助于我們確定物體在圖像中的位置。
讓我們以上圖為例。我們的注意力集中在圖像的對(duì)象上,也就是說(shuō),在這種情況下,是女孩。我們可以清楚地定位圖像中的女孩,因?yàn)槲覀兛梢栽谀X海中圍繞女孩畫(huà)出邊界。
這就是我們推斷的圖像中的空間信息。
在非重疊匯集的情況下,我們可以看到,由于匯集的不連續(xù)性,將會(huì)丟失一定量的空間信息,因?yàn)樗懈咧刀紝⒈徊东@。
但是,在重疊匯集的情況下,我們可以看到,隨著高值,一些低值密度高的區(qū)域,它們也將得到保護(hù)??臻g信息是兩者的結(jié)果,因此,在重疊池的情況下,它將被更好地保存。
什么是過(guò)度擬合?
當(dāng)網(wǎng)絡(luò)開(kāi)始關(guān)注某個(gè)特定的特征時(shí),任何偏離都會(huì)導(dǎo)致錯(cuò)誤的預(yù)測(cè)。這種超敏感性導(dǎo)致泛化能力差。
因此,如果使用非重疊池,那么,網(wǎng)絡(luò)將繼續(xù)集中主要特征,只會(huì)導(dǎo)致災(zāi)難性的過(guò)度擬合。
但是,在重疊池的情況下,由于空間信息是守恒的,網(wǎng)絡(luò)不會(huì)輕易溢出。
現(xiàn)在我還沒(méi)有看到這種技術(shù)被普遍使用。最合理的原因是批量標(biāo)準(zhǔn)化,它具有正則化效果,還可以防止過(guò)度擬合。因此,為了節(jié)省空間,我們使用正常的非重疊池。
他們使用的第三個(gè)技巧是數(shù)據(jù)擴(kuò)充。
我們希望我們的神經(jīng)網(wǎng)絡(luò)能夠很好地泛化,因此,我們通過(guò)進(jìn)行一些簡(jiǎn)單的操作和動(dòng)態(tài)操作來(lái)增強(qiáng)我們的數(shù)據(jù),即增強(qiáng)的圖像是在訓(xùn)練時(shí)生成的(就像在 AlexNet 中一樣)。
AlexNet 使用圖像翻譯和水平反射。在他們擁有的 256x256 的圖像中,他們隨機(jī)選取了 224x224 的圖像以及它們的水平反射。因此,隨機(jī)獲取補(bǔ)丁的行為就是圖像轉(zhuǎn)換。至于水平翻轉(zhuǎn),我們來(lái)看這個(gè)例子:
來(lái)源:阿布舍克·維爾馬
他們使用的第二種增強(qiáng)手段是我在別處從未見(jiàn)過(guò)的。他們改變了訓(xùn)練樣本中 RGB 通道的強(qiáng)度。
他們首先對(duì)整個(gè) ImageNet 訓(xùn)練數(shù)據(jù)集的 RGB 像素執(zhí)行 PCA。他們提取了每個(gè)通道的主要成分。然后,他們將這些主成分的隨機(jī)部分添加到圖像的每個(gè)像素中。
它對(duì)圖像所做的是改變照明的顏色和強(qiáng)度。因此,它利用了自然圖像的一個(gè)特性,即物體的標(biāo)簽對(duì)于光照參數(shù)是不變的。一只狗是一只在明亮的白光和黃燈下的狗,句號(hào)!
這是我第一次與這種增強(qiáng)幽會(huì),還沒(méi)有看到它被使用。由于當(dāng)今數(shù)據(jù)的巨大規(guī)模,當(dāng)我們今天有其他隨機(jī)操作用于增強(qiáng)時(shí),如縮放、傾斜等,經(jīng)歷尋找主成分的痛苦似乎是低效的。
這是他們用的第四招。老實(shí)說(shuō),這不需要介紹,因?yàn)檫@是今天減少神經(jīng)網(wǎng)絡(luò)過(guò)度擬合的事實(shí)上的方法。
丟棄是隨機(jī)關(guān)閉一些神經(jīng)元,這樣,每個(gè)神經(jīng)元被迫學(xué)習(xí)不依賴于其鄰居的特征,從而導(dǎo)致更健壯的特征。
最后,讓我們來(lái)統(tǒng)計(jì)一下對(duì)這個(gè)網(wǎng)絡(luò)幫助最大的是什么:
來(lái)源:阿布舍克·維爾馬
如果您對(duì)什么是前 1 名和前 5 名錯(cuò)誤感到困惑,那么,我們知道 ImageNet 總共有 1000 個(gè)類。正常的方法是預(yù)測(cè)對(duì)應(yīng)于最終層中最高值的類別,這里稱為 top-1。另一種方法是采用 top-k 方法(在這種情況下,k = 5),這里,我們將預(yù)測(cè)作為對(duì)應(yīng)于最終層中具有前 5 個(gè)最高值的單元的類。如果在這 5 條中,有任何一條符合事實(shí),那么,我們認(rèn)為這是一個(gè)成功的預(yù)測(cè)。
他們使用的優(yōu)化器 SGD with momentum 至今仍在使用,但需要一個(gè)適當(dāng)?shù)挠?xùn)練計(jì)劃,因此很難訓(xùn)練。所以,事實(shí)上的優(yōu)化者是亞當(dāng)。在 AlexNet 的情況下使用了 0.9 的動(dòng)量。
訓(xùn)練批量 128,不錯(cuò),符合所有關(guān)于深度學(xué)習(xí)的建議。批量樣本數(shù)量越多,模型越好。
重量衰減也使用了 0.0005 的值。體重下降在今天仍然很流行,并被用于模特身上來(lái)提高她們的表現(xiàn)。
權(quán)重初始化使用標(biāo)準(zhǔn)偏差為 0.01 的零均值高斯分布完成。在偏置初始化的情況下,在第二、第四、第五和更高密度層的情況下,它們已經(jīng)用 1 初始化偏置,而其他層的偏置用 0 初始化。這種初始化最初通過(guò)給 ReLU 正輸入來(lái)幫助網(wǎng)絡(luò)。
學(xué)習(xí)率最初設(shè)定為 0.01,每當(dāng)驗(yàn)證錯(cuò)誤率停止提高時(shí),學(xué)習(xí)率就會(huì)降低 10 倍。
我們終于了解了 AlexNet 的一切。
資料來(lái)源:阿布舍克·維爾馬
如果你想試試這段代碼,我建議 Google 的COLAB**。這個(gè)用的是 TensorFlow 2.2.0。**我在這里使用了簡(jiǎn)單的 MNIST 數(shù)據(jù)集,并調(diào)整其大小以適應(yīng) AlexNet 輸入。為什么?因?yàn)槿绻覀冚斎?28x28 圖像可用 MNIST,這不會(huì)編譯。試試看!第一次卷積后,就沒(méi)有什么可以應(yīng)用最大池了。
現(xiàn)在,我已經(jīng)盡我所能從論文中吸收了更多的內(nèi)容。首先,我沒(méi)有使用兩個(gè)詞干,因?yàn)檫@不是 GPU 空間匱乏的古代。所以,我用了一個(gè)單獨(dú)的莖。
在要點(diǎn)的第 37 行之前,我已經(jīng)加載了 MNIST 的數(shù)據(jù)并對(duì)其進(jìn)行了整形。我只取了 MNIST 的一小部分,因?yàn)榧虞d它并調(diào)整它的大小會(huì)溢出內(nèi)存,導(dǎo)致內(nèi)核被轉(zhuǎn)儲(chǔ)。
在第 38 行,我已經(jīng)用定義了第一層。濾鏡數(shù)量為 96,濾鏡大小為 11x11,激活為,我用過(guò)的最后一個(gè)不熟悉的是用均值為 0,標(biāo)準(zhǔn)差為 0.01 的高斯分布初始化權(quán)重,在論文中有提到。如果你想知道偏差,默認(rèn)情況下,它們被設(shè)置為零。
在行 42 處,我們有,其中我將過(guò)濾器大小設(shè)置為 3x3,步幅設(shè)置為(2,2)。
在行 44 處,我們又有了。在這里,有一點(diǎn)改變了,我也使用了一個(gè)保存值的。如論文中所述,這是為了在該層設(shè)置偏差 1。
在線 48 處,我們有一個(gè)就像 42 線一樣。
在50 線,我們有。濾波器數(shù)量為 384,濾波器大小為 3x3,激活為,已用于使用均值為 0、標(biāo)準(zhǔn)差為 0.01 的高斯分布初始化權(quán)重,如論文中所述,最后已用于將偏差設(shè)置為 1,如論文中所述。
在線 53 和 57 處,遵循與線 50 相同的模式。
在線 61 處,我們有一個(gè)就像 42 線一樣。
在第 63 行的處,一個(gè)層被用來(lái)去掉多余的尺寸。這是正在發(fā)生的轉(zhuǎn)變:
來(lái)源:Deep Tech Talker
在第 65 行,層使用了 4096 個(gè)單位(在論文中,每個(gè)詞干有 2048 個(gè)單位),被用于初始化平均值為 0、標(biāo)準(zhǔn)差為 0.01 的高斯分布的權(quán)重,被用于初始化偏差為 1,如論文中所述。
在行 69 處,已被使用并設(shè)置為。在論文中,輟學(xué)的價(jià)值并沒(méi)有具體提到與網(wǎng)絡(luò)的關(guān)系,但是,在關(guān)于輟學(xué)的討論中,他們談到了這個(gè)價(jià)值,因此,我使用了它。沒(méi)有明確提到所使用的輟學(xué)。
在線 71 處,遵循與線 65 相同的模式。
在線 75 處,遵循與線 69 相同的模式。
在第 77 行,我們有預(yù)測(cè)層,這里,我們有 10 個(gè)類,相比之下,在 AlexNet 中使用的 ImageNet 中有 1000 個(gè)類。使用激活和 10 個(gè)單位的層進(jìn)行預(yù)測(cè)。此外,已被用于初始化具有平均值 0 和標(biāo)準(zhǔn)偏差 0.01 的高斯分布的權(quán)重。偏差隱含地為 0。
在第 83 行,我們有,在這里我們決定優(yōu)化器、損失和模型的指標(biāo)。作者使用了動(dòng)量為 0.9、重量衰減為 0.0005 的 SGD,但是在 TensorFlow 中沒(méi)有 SGD 的重量衰減功能。所以,我只用過(guò)動(dòng)量 0.9 的 SGD。根據(jù)論文已經(jīng)使用了 0.01 的學(xué)習(xí)率。論文中的指標(biāo)是前 1 名(相當(dāng)于準(zhǔn)確性)和前 5 名。這兩個(gè)指標(biāo)都設(shè)置在這一行中。損失是用于多級(jí)分類的。
在第 89 行處,當(dāng)驗(yàn)證誤差沒(méi)有改善時(shí),我使用了來(lái)降低學(xué)習(xí)率。對(duì)于多少個(gè)時(shí)代,他們看到它是否在改變,這在的論文中沒(méi)有提到。這由所用函數(shù)中的屬性設(shè)置。屬性允許我們?cè)谡撐闹刑岬降膶W(xué)習(xí)率沒(méi)有提高時(shí),將學(xué)習(xí)率除以 10。顯示了學(xué)習(xí)率的下限,這是作者在訓(xùn)練時(shí)設(shè)定的最小學(xué)習(xí)率。
在線 93 處,我們擬合模型。根據(jù)文件設(shè)定了 128 個(gè)批次和 90 個(gè)時(shí)期。
今天,我們回顧并了解了第一個(gè)將 GPU 帶到陽(yáng)光下的開(kāi)創(chuàng)性網(wǎng)絡(luò)。這個(gè)網(wǎng)絡(luò)單槍匹馬撬動(dòng)了圖像深度學(xué)習(xí)的時(shí)代。它讓 GPU 變得流行起來(lái),而且它們會(huì)一直存在下去。
原文:https://towardsdatascience.com/algebra-behind-pca-7d801226f4e6?source=collection_archive---------49-----------------------
羅馬法師在 Unsplash 上拍攝的照片
在我進(jìn)行的一些采訪中,我們最終會(huì)談到降維技術(shù)。PCA 絕對(duì)是最受考生歡迎的一個(gè)。我個(gè)人不喜歡深入挖掘與角色不相關(guān)的領(lǐng)域,因?yàn)槲易约嚎赡芤膊恢来鸢?#xff01;但是我喜歡問(wèn)他們是否知道 PCA 是如何工作的。雖然我并不期望應(yīng)聘者知道確切的代數(shù),但我喜歡看他們是否有一些直覺(jué),他們是否只是不知道(這對(duì)我來(lái)說(shuō)完全沒(méi)問(wèn)題),或者他們是否試圖假裝他們知道,這就是我的大腦用黃色旗幟提醒我的地方。
一些候選人開(kāi)始談?wù)?PCA 如何使用特征向量來(lái)計(jì)算最終特征。這里是我喜歡問(wèn)的地方,什么是特征向量,PCA 計(jì)算的特征向量是什么?這是大多數(shù)候選人開(kāi)始動(dòng)搖的地方。同樣,即使這不是成為一名數(shù)據(jù)科學(xué)家必須知道的事情,我個(gè)人也更愿意得到諸如我不確定之類的答案,而不是候選人不知道的事情。
在這篇文章中,我希望能幫助人們對(duì) PCA 的實(shí)際工作原理有一些基本的直覺(jué),并且在面試中有信心回答這個(gè)問(wèn)題。
Eigen 來(lái)自德語(yǔ),意思是擁有,因此可以將特征向量和特征值轉(zhuǎn)換為矩陣的自向量和自值。但這實(shí)際上意味著什么呢?
讓我們后退一步,把本征態(tài)的定義正式化。我們將矩陣 A 的特征值 a 定義為:
一個(gè) v =一個(gè) v
換句話說(shuō),對(duì)向量實(shí)施線性變換(保持和與乘的變換),通過(guò)標(biāo)量改變*。因此,當(dāng)且僅當(dāng) v 是 A 的特征向量時(shí),對(duì) v 應(yīng)用矩陣 A 的點(diǎn)積只會(huì)改變向量的長(zhǎng)度而不會(huì)改變其方向!注意 A 是一個(gè)n×n矩陣,在做特征分解時(shí)會(huì)有 n 個(gè)特征向量和 n 個(gè)特征值。***
只是澄清一下,不是所有矩陣和向量之間的點(diǎn)積都滿足這個(gè)條件。
必須是一個(gè)方陣(行數(shù)與列數(shù)相同)才能進(jìn)行特征分解。除此之外,為了很好地定義特征向量,所有特征值必須互不相同。
最后,同樣重要的是要注意,所有的特征向量都是相互垂直的,每個(gè)特征向量都有自己的特征值。
為了理解 PCA 的代數(shù)是如何工作的,我們先來(lái)思考一下 PCA 的目標(biāo)是什么。使用 PCA,我們希望減少完整數(shù)據(jù)集中的特征數(shù)量,盡可能多地保留原始數(shù)據(jù)中的信息,并刪除最高的相關(guān)性。
但是等等!我們?nèi)绾魏饬窟@些相關(guān)性來(lái)確定方向的優(yōu)先級(jí)?嗯,我們確實(shí)有一個(gè)矩陣來(lái)跟蹤不同特征之間的相關(guān)性,這就是 協(xié)方差矩陣 ,所以讓我們使用它吧!
關(guān)于這一點(diǎn),有一個(gè)快速說(shuō)明:有其他矩陣可用于 PCA,但協(xié)方差矩陣是最流行和直觀的一種。
因此,我們可以對(duì)協(xié)方差矩陣進(jìn)行特征分解,看看哪些是具有更高特征值的特征向量。對(duì)應(yīng)于最高特征值( x1 )的特征向量將是指示數(shù)據(jù)中最高方差的特征向量,因此是特征之間相關(guān)性最小的方向。第二個(gè)( x2 )將是垂直于 x1 的第二高方差方向,以此類推。
簡(jiǎn)而言之,一旦計(jì)算出協(xié)方差矩陣,如果想將 n 維從 n 維減少到 m 維,就很簡(jiǎn)單:
- 第一步:計(jì)算協(xié)方差矩陣的特征向量。
- 第二步:設(shè)置特征值最高的前 m 個(gè)特征向量。這將是你的旋轉(zhuǎn)矩陣 W, 其中 W 中的每一行對(duì)應(yīng)于排序后的頂部 m 特征向量。 W 是一個(gè) m x n 矩陣。
- 步驟 3 :給定一個(gè)數(shù)據(jù)點(diǎn) x, 可以通過(guò)執(zhí)行線性變換*x’= W x .*找到在 m 維空間中的投影,給定 W 是一個(gè) m x n 矩陣,x’
讓我們看看下面的例子,以便更清楚地了解發(fā)生了什么:
假設(shè)我們有兩個(gè)特征:給定城市中一套公寓的大小和該套公寓的價(jià)格。我們的任務(wù)是將數(shù)據(jù)縮減到 1D 空間。給定的數(shù)據(jù)集如下左圖所示。
一個(gè)人應(yīng)該采取的步驟是()同樣,有多種方法可以做到這一點(diǎn),我們只是舉一個(gè)例子!):
- ****第一步:根據(jù)你的數(shù)據(jù)定義協(xié)方差矩陣,計(jì)算你的協(xié)方差矩陣的特征向量。
- ****第二步:特征向量在中間的圖片中顯示為綠色。最長(zhǎng)的特征向量是對(duì)應(yīng)于最高特征值的特征向量(特征向量通常被歸一化為 1,這只是為了可視化的目的)。很明顯,它是指向最高方差的方向。這是一個(gè)人想要保持的方向,因?yàn)樗俗疃嗟男畔ⅰ?/strong>
- ****第三步:一旦確定了最高特征值對(duì)應(yīng)的特征向量,就要把數(shù)據(jù)點(diǎn)投影到后者定義的直線上。如右圖所示。
圖 1:(從左到右)a)原始數(shù)據(jù)集 b)原始數(shù)據(jù)集連同協(xié)方差矩陣特征向量 c)原始數(shù)據(jù)集在最高特征值對(duì)應(yīng)的特征向量所定義的直線上的投影。
我希望這能讓你對(duì)使用 PCA 時(shí)發(fā)生的事情有一個(gè)基本的概念!
原文:https://towardsdatascience.com/algorithm-bias-in-artificial-intelligence-needs-to-be-discussed-and-addressed-8d369d675a70?source=collection_archive---------20-----------------------
當(dāng)人工智能用于解決全球性問(wèn)題時(shí),算法偏差可能會(huì)開(kāi)始出現(xiàn),并可能導(dǎo)致意想不到的不便、負(fù)面影響和損害。
對(duì)于那些不熟悉術(shù)語(yǔ)“算法偏差”的人,我將在本文中提供一個(gè)合適的定義。
但是,如果你曾經(jīng)遇到過(guò)一篇新聞文章,指出某種形式的歧視是由人工智能或自動(dòng)化系統(tǒng)傳達(dá)的,那么你就會(huì)遇到算法偏見(jiàn)。
新聞標(biāo)題中的人工智能偏見(jiàn)
算法偏差這個(gè)話題并不新鮮,我將提供幾年前的幾個(gè)偏差的例子。
我現(xiàn)在寫(xiě)這篇文章的原因是因?yàn)槿斯ぶ悄芟到y(tǒng)和機(jī)器學(xué)習(xí)解決方案在解決全球問(wèn)題方面的快速應(yīng)用。
更具體地說(shuō),在撰寫(xiě)本文時(shí),有公司 、數(shù)據(jù)科學(xué)家、機(jī)器學(xué)習(xí)工程師和人工智能愛(ài)好者已經(jīng)接過(guò)了衣缽,利用他們的技能來(lái)幫助對(duì)抗新冠肺炎·疫情。
理應(yīng)如此。
但同樣重要的是,這些公司和有才華的個(gè)人要明白,大量的人使用他們的系統(tǒng),所以當(dāng)涉及到算法偏差的問(wèn)題時(shí),需要某種形式的審查。
讓我們開(kāi)始吧
算法偏差這個(gè)話題很重要,也有些復(fù)雜,但是它的定義很簡(jiǎn)單。
算法偏差是從計(jì)算機(jī)系統(tǒng)的輸出中出現(xiàn)的缺乏公平性。《算法偏差》中描述的不公平有多種形式,但可以總結(jié)為一個(gè)群體基于特定分類的歧視。
算法偏見(jiàn)有幾種形式,例如,種族偏見(jiàn),年齡歧視,性別偏見(jiàn)等。
我不知道讀者的年齡、種族或性別,但我可以向你保證,每個(gè)人都容易受到算法偏見(jiàn)的危害。
Artem Maltsev 在 Unsplash 上拍攝的照片
算法偏差的真正原因是什么,我們真的能指責(zé)誰(shuí)嗎?
今天,算法和機(jī)器學(xué)習(xí)系統(tǒng)中的偏見(jiàn)是許多情況的結(jié)果。
深度學(xué)習(xí)模型的工作方式是利用神經(jīng)網(wǎng)絡(luò)的模式識(shí)別能力。
因此,可以說(shuō)深度學(xué)習(xí)模型不能通過(guò)設(shè)計(jì)直接產(chǎn)生偏差,任何偏差的出現(xiàn)或原因都是神經(jīng)網(wǎng)絡(luò)的架構(gòu)和設(shè)計(jì)之外的。
機(jī)器學(xué)習(xí)模型和人工智能系統(tǒng)產(chǎn)生的輸出只是它們所接觸的訓(xùn)練數(shù)據(jù)集的反映。
所以,我們需要退一步,觀察訓(xùn)練數(shù)據(jù)。
對(duì)于那些不知道的人來(lái)說(shuō),訓(xùn)練數(shù)據(jù)是輸入到神經(jīng)網(wǎng)絡(luò)的預(yù)期類別的例子。這些示例反映了在現(xiàn)實(shí)生活場(chǎng)景中使用時(shí)暴露給神經(jīng)網(wǎng)絡(luò)的數(shù)據(jù)。
我認(rèn)為,在人工智能系統(tǒng)中,訓(xùn)練數(shù)據(jù)主要通過(guò)兩種方式導(dǎo)致算法偏差。
- 數(shù)據(jù)收集者持有的個(gè)人偏見(jiàn)
- 環(huán)境偏差在數(shù)據(jù)收集過(guò)程中有意或無(wú)意地施加。
請(qǐng)注意,訓(xùn)練數(shù)據(jù)可能會(huì)以其他方式導(dǎo)致算法偏差。我就著重說(shuō)上面提到的兩個(gè)。
像你我這樣的人通常會(huì)收集訓(xùn)練數(shù)據(jù)。有意或無(wú)意地,我們都有內(nèi)部偏見(jiàn),這些偏見(jiàn)可以在建立機(jī)器學(xué)習(xí)模型時(shí)涉及的數(shù)據(jù)收集過(guò)程中反映出來(lái)。
環(huán)境偏差可能是為旨在全球范圍內(nèi)使用的人工智能系統(tǒng)在本地獲取訓(xùn)練數(shù)據(jù)的結(jié)果。人工智能系統(tǒng)可能沒(méi)有用足夠的數(shù)據(jù)進(jìn)行訓(xùn)練,這些數(shù)據(jù)代表了它預(yù)期運(yùn)行的實(shí)際場(chǎng)景。
2015 年,Jacky Alciné寫(xiě)了下面這條推文。他的推文表達(dá)了他對(duì)谷歌照片背后的分類算法的擔(dān)憂。該算法把他的朋友誤歸類為大猩猩。
谷歌聲稱已經(jīng)解決了這個(gè)問(wèn)題。但在 2018 年,《連線》再次測(cè)試了該系統(tǒng),似乎谷歌的解決方案是避免將大猩猩和其他一些靈長(zhǎng)類動(dòng)物完全分類。他們似乎只是簡(jiǎn)單地解決了這個(gè)問(wèn)題。
時(shí)間快進(jìn)到 2020 年 4 月,仍有消息稱谷歌圖片標(biāo)簽服務(wù)在對(duì)裝有物品的手臂進(jìn)行分類時(shí)表現(xiàn)出種族偏見(jiàn)。這個(gè)標(biāo)簽系統(tǒng)似乎把一個(gè)拿著一個(gè)物體的黑手歸類為槍。
手持的物體是一個(gè)溫度計(jì),很多你可能在最近的新聞中看到過(guò)。在當(dāng)前的新冠肺炎疫情期間,這些溫度計(jì)正成為一種熟悉的景象,因?yàn)樗鼈儽挥米髯R(shí)別患病個(gè)體的方法。
這種形式的偏見(jiàn),以及許多其他形式的偏見(jiàn),正在實(shí)時(shí)發(fā)生。
想象一下,在未來(lái)的五十年里,先進(jìn)的機(jī)器人執(zhí)法系統(tǒng)開(kāi)始管理社區(qū),它們無(wú)法區(qū)分一個(gè)持有非威脅性物品的有色人種和一把真正的槍。
更可悲的是,這與許多人今天面臨的現(xiàn)實(shí)并不遙遠(yuǎn)。唯一的區(qū)別就是缺少機(jī)器人。但這是一個(gè)完全不同的對(duì)話,這是不斷提出的。
我們來(lái)談?wù)劷鉀Q方案。
當(dāng)想到算法和人工智能偏差的解決方案時(shí),一個(gè)詞浮現(xiàn)在腦海中。
多樣性。
圖片來(lái)自 Unsplash
向前邁出的一步將是在人工智能行業(yè)的任何流程或項(xiàng)目的早期階段納入多樣性工作。我們甚至可以追溯到鼓勵(lì)學(xué)術(shù)機(jī)構(gòu)的多樣性。
我經(jīng)歷過(guò)技術(shù)領(lǐng)域缺乏多樣性。在我讀機(jī)器學(xué)習(xí)和計(jì)算機(jī)視覺(jué)理學(xué)碩士期間,我能數(shù)清整個(gè)課程中黑人學(xué)生的數(shù)量。準(zhǔn)確地說(shuō)是四個(gè),包括我自己。這門(mén)課有 200 多名學(xué)生。
機(jī)構(gòu)內(nèi)部缺乏多樣性可能不是故意的,但這一問(wèn)題應(yīng)該得到可悲的解決。如果我們有更多具有不同背景的個(gè)人收集數(shù)據(jù)并建立人工智能系統(tǒng),我們可能會(huì)看到以前可能被忽略的數(shù)據(jù)集片段的包含。
在整篇文章中,我關(guān)注的是人工智能系統(tǒng)中存在的種族偏見(jiàn)。但我們也應(yīng)該意識(shí)到可能出現(xiàn)的其他形式的偏見(jiàn)。例如,卡內(nèi)基梅隆大學(xué)的研究人員在 2015 年進(jìn)行的研究揭示了谷歌廣告中存在的性別歧視。
長(zhǎng)話短說(shuō),與男性同行相比,女性不太可能看到高薪工作廣告。
同樣,這些系統(tǒng)中偏差的原因不能直接確定,但是解決方案可以在與 AI 產(chǎn)品開(kāi)發(fā)相關(guān)的所有過(guò)程中實(shí)施。
一個(gè)良好的開(kāi)端將是確保訓(xùn)練數(shù)據(jù)確實(shí)代表這些人工智能系統(tǒng)被利用的實(shí)際場(chǎng)景。
在法律和決策部門(mén)可以看到另一種解決辦法。有組織的機(jī)構(gòu)正在推動(dòng)關(guān)鍵的政策制定者確保減少算法偏差的措施是一項(xiàng)強(qiáng)制性措施,而不是一項(xiàng)選擇。
在大多數(shù)情況下,構(gòu)建人工智能系統(tǒng)的工程師并沒(méi)有內(nèi)在的偏見(jiàn)和對(duì)特定人群的偏見(jiàn)。
然而,由于缺乏對(duì)其他文化和各行各業(yè)的接觸,在開(kāi)發(fā)系統(tǒng)預(yù)期運(yùn)行的實(shí)際現(xiàn)實(shí)和創(chuàng)造者打算如何使用它之間可能存在脫節(jié)。
公司和組織內(nèi)部的道德教育是減少算法偏差的解決方案之一。對(duì)員工進(jìn)行文化和生活方式差異方面的教育可以讓他們意識(shí)到社會(huì)中可能被忽視甚至沒(méi)有考慮到的群體。
Jonas Jacobsson 在 Unsplash 上拍攝的照片
一些公司正在人工智能領(lǐng)域做出積極努力,以增加學(xué)術(shù)機(jī)構(gòu)和人工智能課程中代表性不足的群體。就拿 DeepMind 獎(jiǎng)學(xué)金項(xiàng)目 來(lái)說(shuō)吧。
該項(xiàng)目提供的獎(jiǎng)學(xué)金面向低收入背景的個(gè)人;非洲或加勒比遺產(chǎn)或婦女。
要解決全球性的挑戰(zhàn),需要來(lái)自各種背景的優(yōu)秀人才和個(gè)人的共同努力。這就是我們開(kāi)始看到的。
走向可信的人工智能開(kāi)發(fā)是由研究人員共同努力定義的一套指導(dǎo)方針,使開(kāi)發(fā)人員能夠在他們的人工智能系統(tǒng)開(kāi)發(fā)中負(fù)責(zé)任。
這篇文章的大部分讀者可能受雇于人工智能行業(yè),有些人甚至可能直接參與設(shè)計(jì)在幾個(gè)軟件產(chǎn)品中使用的機(jī)器學(xué)習(xí)模型。我贊揚(yáng)您花時(shí)間閱讀這篇文章,并邀請(qǐng)您進(jìn)一步探討這個(gè)主題。
你是算法偏差整體解決方案的重要組成部分。解決方案從你開(kāi)始。數(shù)據(jù)收集者、機(jī)器學(xué)習(xí)工程師、數(shù)據(jù)科學(xué)家和研究人員都扮演著至關(guān)重要的角色。
陳奕迅在 Unsplash 上的照片
這篇文章不是為了羞辱個(gè)人或公司而寫(xiě)的。
相反,它是為了向人工智能社區(qū)表明,在算法偏見(jiàn)的問(wèn)題上存在著爭(zhēng)論。
我相信,為減少人工智能偏見(jiàn)而采取的對(duì)話和行動(dòng)的增加,應(yīng)該與人工智能本身的進(jìn)步速度成比例。
感謝閱讀。
[## 作為機(jī)器學(xué)習(xí)工程師你需要的 5 個(gè)軟技能(以及為什么)
包括成為任何勞動(dòng)力的有用組成部分的提示
towardsdatascience.com](/5-soft-skills-you-need-as-a-machine-learning-engineer-and-why-41ef6854cef6) [## 機(jī)器學(xué)習(xí)工程師和研究人員之間的 7 個(gè)關(guān)鍵區(qū)別(包括工資)
包含有關(guān)期望薪資、工作量、可交付成果以及更多關(guān)鍵差異的信息。
towardsdatascience.com](/7-key-differences-between-machine-learning-engineers-and-researchers-salaries-included-b62c3aaebde9)
原文:https://towardsdatascience.com/algorithmic-bias-and-the-confusion-matrix-dashboard-3926e0c0d329?source=collection_archive---------35-----------------------
隨著算法越來(lái)越多地對(duì)人類事務(wù)做出決策,這些算法及其所依賴的數(shù)據(jù)必須公平和無(wú)偏見(jiàn),這一點(diǎn)非常重要。算法偏差的診斷之一是混淆矩陣。混淆矩陣是一個(gè)表格,顯示了在預(yù)測(cè)中會(huì)出現(xiàn)什么樣的錯(cuò)誤。雖然每個(gè)處理數(shù)據(jù)的人都知道什么是混亂矩陣 什么是 ,但是對(duì)于它在不同種類的預(yù)測(cè)和結(jié)果分布以及可能的決策閾值范圍下如何表現(xiàn),獲得直覺(jué)是一件更微妙的事情。
在本文中,我將介紹一個(gè)交互式的 混淆矩陣儀表板 ,您可以使用它來(lái)探索不同的數(shù)據(jù)集和預(yù)測(cè)模型,并觀察混淆矩陣的行為。您可以加載自己的數(shù)據(jù)。其中兩個(gè)數(shù)據(jù)集是純粹的合成分布,你可以調(diào)整旋鈕。另一組數(shù)據(jù)包含了一些綜合的例子,這些例子說(shuō)明了算法偏差是如何與環(huán)境不平衡區(qū)分開(kāi)來(lái)的。我所說(shuō)的環(huán)境失衡是指不同的群體可能天生擁有不同的特征分布,從而導(dǎo)致不同的結(jié)果分布。我提出了一種預(yù)測(cè)偏差的新方法,稱為陽(yáng)性預(yù)測(cè)比得分(PPRS ),它獨(dú)立于混淆矩陣,而是比較預(yù)測(cè)得分范圍內(nèi)的陽(yáng)性結(jié)果比曲線。
混淆矩陣儀表板——鐘形負(fù)面和正面結(jié)果分布。
混淆矩陣儀表板還包括兩組關(guān)于嚴(yán)重事件的真實(shí)數(shù)據(jù),并附有一些預(yù)測(cè)模型。一個(gè)有趣的模型是用于預(yù)測(cè)刑事累犯的 COMPAS 模型。COMPAS 模型因所謂的算法偏差而受到抨擊。這種說(shuō)法是基于不同種族群體的混淆矩陣中出現(xiàn)假陽(yáng)性和假陰性率的方式。然而,沒(méi)有單一一致的方法來(lái)定義算法偏差?;煜仃噧x表板允許我們探索潛在的數(shù)據(jù)分布和預(yù)測(cè)模型可能引起可能被誤導(dǎo)的偏見(jiàn)指控的方式。
為了配合本文,我準(zhǔn)備了一些視頻來(lái)介紹主要概念。這篇文章的 2 分鐘宣傳片是:
本文視頻版本。
算法偏差和混淆矩陣儀表盤(pán)—宣傳片
為了理解混淆矩陣的目的,考慮一個(gè)為二元結(jié)果變量產(chǎn)生預(yù)測(cè)分?jǐn)?shù)的過(guò)程。分配分?jǐn)?shù)后,我們進(jìn)行實(shí)驗(yàn)并進(jìn)行觀察。觀察結(jié)果被記錄為正面或負(fù)面。多次這樣做,我們可以建立兩個(gè)結(jié)果分布作為預(yù)測(cè)分?jǐn)?shù)的函數(shù),一個(gè)分布用于正面結(jié)果,一個(gè)用于負(fù)面結(jié)果。
混亂矩陣儀表板允許你試驗(yàn)兩種不同的交互式合成分布。一個(gè)合成分布定義了正面和負(fù)面結(jié)果的分?jǐn)?shù),這些分?jǐn)?shù)以凸起或“鐘形曲線”的形式下降。您可以控制正負(fù)分?jǐn)?shù)凸起的高度、寬度和位置。第二種分布沿預(yù)測(cè)分?jǐn)?shù)軸更均勻地放置正面和負(fù)面結(jié)果分?jǐn)?shù)。隨著分?jǐn)?shù)的增加,你可以玩這些分布的上升和下降。
這是一個(gè)真實(shí)的虛構(gòu)的例子。這個(gè)例子開(kāi)始很簡(jiǎn)單,但是它允許我們?cè)u(píng)估算法偏差和公平性的概念。
假設(shè)你正在為 500 個(gè)孩子的學(xué)校野餐打包快餐盒。一些孩子喜歡蘋(píng)果,而另一些喜歡其他東西,如爆米花、餅干或餅干。你有兩種點(diǎn)心盒,一種裝蘋(píng)果,一種裝別的東西。你必須事先決定給每個(gè)孩子哪種盒子,然后貼上他們的名字,分發(fā)給他們。當(dāng)每個(gè)孩子打開(kāi)他們的零食盒子時(shí),他們要么會(huì)對(duì)他們的零食感到滿意,然后說(shuō)“耶!”,否則他們會(huì)失望地說(shuō)“Awwww”。
為了幫助你做出決定,你可以根據(jù)一些經(jīng)驗(yàn)來(lái)預(yù)測(cè)每個(gè)孩子喜歡哪種零食。大一點(diǎn)的孩子喜歡蘋(píng)果,而小一點(diǎn)的孩子不喜歡。高個(gè)子孩子喜歡蘋(píng)果,而矮個(gè)子孩子不喜歡。阿普爾鮑姆先生班上的孩子傾向于喜歡蘋(píng)果,而爆米花女士班上的孩子想要?jiǎng)e的。沒(méi)有硬性規(guī)定,只是有根據(jù)的猜測(cè)。
對(duì)于每個(gè)孩子,你給他們一個(gè)分?jǐn)?shù),表明他們想要一個(gè)蘋(píng)果的預(yù)測(cè)。10 分意味著你很確定他們會(huì)想要一個(gè)蘋(píng)果,比如在阿普爾鮑姆先生的班上,一個(gè) 10 歲的高個(gè)子。1 分意味著你確信他們不會(huì)想要蘋(píng)果,就像爆米花女士班上一個(gè)較矮的 6 歲小孩。
對(duì)于每個(gè)孩子,在計(jì)算他們的預(yù)測(cè)分?jǐn)?shù)后,你做出決定。你可以在 5 分的中間點(diǎn)做決定?;蛘?#xff0c;您可以將蘋(píng)果零食閾值設(shè)置得更高或更低。例如,如果孩子們吃水果很重要,你就把門(mén)檻設(shè)得低一些,這樣你就能抓住更多喜歡吃蘋(píng)果的孩子?;蛘?#xff0c;如果你想盡量減少扔進(jìn)垃圾桶的蘋(píng)果片,那么你可以把門(mén)檻設(shè)得更高,這樣分發(fā)的蘋(píng)果零食就更少了。換句話說(shuō),您的決定取決于對(duì)不同類型錯(cuò)誤的權(quán)衡。
野餐時(shí),你記錄下孩子們的反應(yīng)。你寫(xiě)下你給他們的預(yù)測(cè)分?jǐn)?shù)是多少,你是否根據(jù)決策閾值給了他們一個(gè)蘋(píng)果,他們的反應(yīng)是什么。這是你的決定的回報(bào)。
我們?cè)谝粋€(gè)表格中記錄結(jié)果,表格中的行對(duì)應(yīng)于孩子的偏好,列對(duì)應(yīng)于你給每個(gè)孩子一份蘋(píng)果零食或其他零食的決定?;煜仃囉?jì)算表中每個(gè)象限的數(shù)字和比率。
原始計(jì)數(shù)表位于左上方,而比率表位于右側(cè)。
混淆矩陣:計(jì)數(shù)、比率、條件使用測(cè)量。
你的表現(xiàn)取決于幾個(gè)因素:
- 你的預(yù)測(cè)與每個(gè)孩子的需求有多吻合。理想情況下,你的預(yù)測(cè)會(huì)將所有想要蘋(píng)果的孩子(紅色)分布在右邊,而所有沒(méi)有蘋(píng)果的孩子(綠色)分布在左邊。這樣你就可以把門(mén)檻放在中間,正確預(yù)測(cè)每個(gè)孩子的偏好。
零食偏好的理想可分分布。
- 有多少孩子真的想要蘋(píng)果。這是基本比率,紅色蘋(píng)果小孩和綠色非蘋(píng)果小孩的總比例。
此時(shí),您可能需要花點(diǎn)時(shí)間在混淆矩陣儀表板中玩一下雙單峰分布合成器。用分?jǐn)?shù)排列正(紅)和負(fù)(綠)凸起,使分布完全分開(kāi)。然后,通過(guò)讓分布重疊來(lái)增加決策的難度。左右滑動(dòng)閾值,查看混淆矩陣中的計(jì)數(shù)和比率如何變化。
評(píng)估你的表現(xiàn)有多種方法。你可以關(guān)注你預(yù)測(cè)正確的孩子的比例(TPR 和 TNR)。(TPR:真陽(yáng)性率又稱為 敏感性 ,TNR:真陰性率又稱為 特異性 。)或者你可以專注于你弄錯(cuò)的孩子(FPR:假陽(yáng)性率,FNR:假陰性率)。或者,你可以關(guān)注你認(rèn)為想要蘋(píng)果的孩子的比例,然后他們真的想要了。這叫精度*。精度,也稱為正預(yù)測(cè)值(PPV),是 Berk 等人稱為條件使用度量[1]的四個(gè)術(shù)語(yǔ)之一,如底部表格所示。*
然后,這些度量可以進(jìn)一步組合成聚合度量,其名稱如“準(zhǔn)確性”、F1 分?jǐn)?shù)和 MCC。
ROC(接收器工作特性)和 Precision/Recall 曲線顯示了隨著決策閾值的變化,一些指標(biāo)如何相互權(quán)衡。你可以在維基百科和許多其他解釋網(wǎng)站上閱讀所有關(guān)于這些措施的內(nèi)容。
雖然這里我們只考慮二元決策,但多變量預(yù)測(cè)會(huì)產(chǎn)生更多行和列的混淆矩陣,以及對(duì)其他性能指標(biāo)的闡述。
考慮兩個(gè)孩子群體,其中一個(gè)總體上更喜歡蘋(píng)果(較高的基本比率),而其他人不太喜歡蘋(píng)果(較低的基本比率)。然后,從數(shù)學(xué)上證明,如果正分布和負(fù)分布重疊(通過(guò)設(shè)置決策閾值不能完全分離),那么這兩個(gè)群體的混淆矩陣條目在假陽(yáng)性率、假陰性率、假發(fā)現(xiàn)率和假遺漏率方面不可能相同【2】【3】。然而,這些都是評(píng)估決策過(guò)程中的公平性和偏見(jiàn)的有效候選者。換句話說(shuō),不存在單一的方法來(lái)確定一個(gè)決策過(guò)程是否偏向于或反對(duì)預(yù)測(cè)一個(gè)群體對(duì)另一個(gè)群體的正面和負(fù)面結(jié)果。
為了更深刻地理解這一事實(shí),我為蘋(píng)果零食決策問(wèn)題生成了合成數(shù)據(jù)。一個(gè)孩子相對(duì)于其他孩子對(duì)蘋(píng)果零食偏好被認(rèn)為是四個(gè)屬性的線性函數(shù),這四個(gè)屬性是年齡、身高、老師和寵物。公式如下:
年齡從 6 歲持續(xù)到 10 歲。身高從 40 到 60 英寸不等。Class 接受三個(gè)分類值中的一個(gè),{Ms. Popcorn=0,Miss Fruitdale=1,Mr. Applebaum=2}。寵物取四個(gè)值之一,{烏龜=0,魚(yú)=1,貓=2,狗=3}。系數(shù) c 為屬性提供權(quán)重。為了簡(jiǎn)單起見(jiàn),我們將所有系數(shù)設(shè)置為 1.0,但是將屬性值規(guī)范化為范圍 0 到 1。這樣,所有屬性都同等重要。預(yù)測(cè)分?jǐn)?shù)被標(biāo)準(zhǔn)化為 0 到 1 的范圍,然后被視為孩子更喜歡蘋(píng)果零食(1.0)或其他零食(0.0)的概率。為了繪制圖表,預(yù)測(cè)分?jǐn)?shù)被劃分成一定數(shù)量的箱。對(duì)于這個(gè)問(wèn)題,20 個(gè)箱很好地顯示了分布曲線。
產(chǎn)生孩子們對(duì)零食的偏好。
為了生成合成孩子、他們的預(yù)測(cè)分?jǐn)?shù)和偏好結(jié)果,我們對(duì)四個(gè)屬性的生成器分布進(jìn)行采樣。對(duì)于年齡和身高這兩個(gè)連續(xù)的屬性,讓我們使用一個(gè)線性生成器分布,它可以在整個(gè)范圍內(nèi)是均勻的,也可以向下限或上限傾斜。如果年齡的發(fā)生器分布向上傾斜,那么年齡大的假裝孩子會(huì)比年輕的多。因?yàn)閷?duì)蘋(píng)果的偏好隨著年齡的增長(zhǎng)而增加,那么這將使預(yù)測(cè)得分的分布更加傾斜。
類似地,對(duì)于這兩個(gè)分類屬性,我們可以說(shuō)所有的教師被分配的概率相等,或者不同。例如,如果將更多的孩子分配給 Applebaum 先生,那么分?jǐn)?shù)分布將會(huì)傾斜得更高,因?yàn)?Applebaum 先生貢獻(xiàn)的預(yù)測(cè)分?jǐn)?shù)因子為 2(在范圍規(guī)范化之前),而 Popcorn 女士的預(yù)測(cè)分?jǐn)?shù)因子為 0。
一旦通過(guò)從生成器分布中取樣給一個(gè)孩子分配了屬性,我們就可以將他們的預(yù)測(cè)分?jǐn)?shù)視為偏好蘋(píng)果零食的概率。然后,根據(jù)概率,通過(guò)投擲一枚有偏向的硬幣來(lái)為那個(gè)孩子生成一個(gè)假裝的偏好結(jié)果,從而完成樣本。由于統(tǒng)計(jì)的可變性,每個(gè)預(yù)測(cè)得分箱的陽(yáng)性和陰性結(jié)果的數(shù)量將隨著試驗(yàn)的不同而不同。出于這個(gè)原因,在這些例子中,我選取了 100,000 個(gè)假裝的孩子作為樣本,只是為了平滑統(tǒng)計(jì)數(shù)據(jù)。
結(jié)果是正面結(jié)果偏好分布(偏好蘋(píng)果零食)和負(fù)面結(jié)果的分布(偏好其他零食)?;煜仃噧x表板包括五種不同的實(shí)驗(yàn)條件,不同的發(fā)電機(jī)分布:
***條件 1。統(tǒng)一:*所有屬性在其范圍內(nèi)被統(tǒng)一采樣。由于中心極限定理,這產(chǎn)生了預(yù)測(cè)分?jǐn)?shù)的鐘形分布。作為基于預(yù)測(cè)分?jǐn)?shù)產(chǎn)生孩子實(shí)際偏好的結(jié)果,這導(dǎo)致積極結(jié)果和消極結(jié)果的分布在空間上有些分離。在中間設(shè)置閾值表明,這種分布實(shí)現(xiàn)了 0.64 的真陽(yáng)性和真陰性率,以及 0.36 的假陽(yáng)性和假陰性率。精確度和陰性預(yù)測(cè)值都是. 64。ROC 曲線的面積為 0.7,這通常被認(rèn)為是可接受的預(yù)測(cè)能力,但遠(yuǎn)非完美。
蘋(píng)果零食條件 1:均勻發(fā)電機(jī)分布。
為了探索算法偏差的問(wèn)題,我按性別分離了生成器分布。女孩為四個(gè)屬性中的每一個(gè)獲得一個(gè)生成器分布,而男孩可能獲得不同的一個(gè)。這反映了一個(gè)事實(shí),不管出于什么原因,結(jié)果可能是女孩在人群中有不同的年齡范圍,不同的身高范圍,被不同地分配給教師,或者對(duì)寵物有不同的偏好。統(tǒng)一實(shí)驗(yàn)從對(duì)男孩和女孩使用相同的生成器分布開(kāi)始。因此,毫不奇怪,它們各自的預(yù)測(cè)分布是相同的。
***條件二。偏斜相同:*所有屬性都用偏向高端的生成器分布進(jìn)行采樣。越來(lái)越多的年長(zhǎng)和高的孩子出生,然后越來(lái)越年輕和矮。與爆米花女士相比,更多的孩子被安排在阿普爾鮑姆先生的班級(jí)。更多的孩子把狗作為寵物,而不是烏龜。結(jié)果,零食偏好傾向于更喜歡蘋(píng)果零食而不是其他零食。在偏斜相同的條件下,女孩和男孩的生成元分布是完全偏斜的。因此,他們得到的蘋(píng)果零食偏好分布是相同的。
***條件 3。偏斜相反:*女生的屬性采樣為偏高的生成器分布,而男生的屬性偏低,即男生更年輕,更矮,在爆米花先生的班級(jí)里更多,有更多的烏龜和魚(yú)而不是貓和狗。因此,女孩偏愛(ài)蘋(píng)果,而男孩偏愛(ài)其他零食。總體而言,女孩喜歡蘋(píng)果的基本比率為 58%,而男孩喜歡其他的基本比率也是 58%。
蘋(píng)果零食合成數(shù)據(jù)——女孩和男孩傾向相反的偏好。
最有趣的是比較混淆矩陣的四個(gè)象限。(我將使用近似值來(lái)說(shuō)明采樣噪聲。)以 10 為閾值,在預(yù)測(cè)得分范圍的中間,女生表現(xiàn)出的真實(shí)正率為. 79,真實(shí)負(fù)率僅為. 46。這是因?yàn)榕⒌钠闷蚱梅謹(jǐn)?shù)中點(diǎn)右側(cè)的蘋(píng)果偏好女孩(紅色)更多。對(duì)男孩來(lái)說(shuō),情況正好相反。類似地,女孩顯示出 0.54 的假陽(yáng)性率,因?yàn)樗齻儗?duì)綠色(其他零食)的偏好有一半落在閾值的右邊。他們的假陰性率只有. 21。同樣,對(duì)男孩來(lái)說(shuō),情況正好相反。有趣的是,Precision (PPV)和 NPV 更接近,雖然不完全相同。
人們可能會(huì)看到這些混亂矩陣,并決定預(yù)測(cè)評(píng)分和決策過(guò)程是有偏見(jiàn)的。我認(rèn)為,對(duì)女孩的偏見(jiàn)取決于你是否喜歡蘋(píng)果。然而,有一種方法可以將 TNR、FPR、FNR 和 TPR 這四個(gè)象限統(tǒng)一起來(lái)。即向上調(diào)整女生的決策閾值,向下調(diào)整男生的決策閾值,直到隔著三個(gè) bin。例如,將女孩閾值設(shè)置為 12,將男孩閾值設(shè)置為 9。當(dāng)您在混淆矩陣儀表板中進(jìn)行這些調(diào)整時(shí),您可以看到各個(gè) ROC 曲線上的決策點(diǎn)發(fā)生了變化。
由于前面提到的數(shù)學(xué)約束,這種調(diào)整使對(duì)準(zhǔn)的精度(PPV)更加于之外,并隨之帶來(lái)其他條件使用度量 NPV、FDR 和 FOR。你不能擁有一切。但是,如果您愿意,您可以調(diào)整閾值,使四個(gè)條件使用術(shù)語(yǔ)更加一致,代價(jià)是使女孩和男孩的四個(gè)正比率和負(fù)比率度量值進(jìn)一步分離。
一般來(lái)說(shuō),學(xué)者和政策專家會(huì)舉手表示,由于在混淆矩陣中找不到算法偏差的單一統(tǒng)一度量,因此必須根據(jù)政策來(lái)確定。也就是說(shuō),人群之間哪種性能指標(biāo)的差異是可接受的,哪種是不可接受的?
毫無(wú)疑問(wèn),基于政策的權(quán)衡決策是必不可少的。但是作為一個(gè)技術(shù)問(wèn)題,在評(píng)估預(yù)測(cè)偏差時(shí),我們可以做得比僅僅依賴混淆矩陣更好。
受蘋(píng)果零食實(shí)驗(yàn)的啟發(fā),讓我們考慮一種不同的方法來(lái)判斷預(yù)測(cè)分?jǐn)?shù)是否有偏差。這種方法關(guān)注分?jǐn)?shù)的一致性來(lái)預(yù)測(cè)結(jié)果。對(duì)于一個(gè)給定的預(yù)測(cè)分?jǐn)?shù)箱,結(jié)果是否顯示女孩和男孩以相等的比例更喜歡蘋(píng)果零食或其他零食,而不管多少女孩或男孩碰巧有那個(gè)分?jǐn)?shù)?這就是所謂的校準(zhǔn)公平性【2】。該屬性源自一個(gè)名為陽(yáng)性預(yù)測(cè)比率的值,該值就是每個(gè)條柱中陽(yáng)性結(jié)果的比例。在預(yù)測(cè)分?jǐn)?shù)的范圍內(nèi),陽(yáng)性預(yù)測(cè)率描繪出一條曲線,在混淆矩陣儀表板中用褐色繪制。
正向預(yù)測(cè)比得分
在偏斜的相反發(fā)生器分布下,女孩和男孩的積極預(yù)測(cè)比率曲線是相同的。點(diǎn)擊 PPRS 標(biāo)簽下的復(fù)選框,將它們疊加起來(lái)進(jìn)行比較。這意味著預(yù)測(cè)分?jǐn)?shù)準(zhǔn)確地反映了模擬孩子的偏好,不管這個(gè)孩子是喜歡蘋(píng)果零食還是其他零食的人群中的一員。
這一觀察激發(fā)了基于兩個(gè)群體的陽(yáng)性預(yù)測(cè)比率曲線之間的差異的偏倚的匯總測(cè)量。具體來(lái)說(shuō),計(jì)算兩條曲線之間的面積的函數(shù)。有許多方法可以做到這一點(diǎn)。我選了一個(gè)非常簡(jiǎn)單的:
這是兩個(gè)群體(1 和 2)的陽(yáng)性結(jié)果與所有結(jié)果之比 r 的平方差在預(yù)測(cè)分?jǐn)?shù)倉(cāng)上的總和,通過(guò)因子進(jìn)行加權(quán)和歸一化。加權(quán)因子是兩個(gè)總體之間每個(gè)箱中的最小計(jì)數(shù)。這種加權(quán)的動(dòng)機(jī)是當(dāng)樣本很少時(shí),在樣本噪聲下概率可能變化很大。當(dāng)任一群體在一個(gè)箱中放置少量樣本時(shí),陽(yáng)性預(yù)測(cè)率的差異不顯著。PPRS 測(cè)量受到統(tǒng)計(jì)噪聲的影響,這取決于每個(gè)箱的樣本大小。
偏斜相反情況的 PPRS 是 0.01。一般來(lái)說(shuō),在我的估計(jì)中,低于 0 . 2 的分?jǐn)?shù)表示相對(duì)一致的陽(yáng)性預(yù)測(cè)比率曲線,可以認(rèn)為是無(wú)偏的,而高于 0 . 6 左右的分?jǐn)?shù)表示曲線中有一些顯著的偏差,并表明預(yù)測(cè)偏差。
預(yù)測(cè)偏差是什么樣子的?接下來(lái)的兩個(gè)生成器分布提供了示例。
***條件 4。偏斜相反偏向女孩:*像偏斜相反實(shí)驗(yàn)一樣,生成器分布被設(shè)置成使女孩的零食偏好偏向高的一邊,而男孩則偏向低的一邊。但這一次,女生的預(yù)測(cè)分?jǐn)?shù)統(tǒng)一下移 0.1(左移 2 格)。
請(qǐng)注意,在這種情況下,女孩和男孩的偏好分布表面上看起來(lái)比條件 3 更相似。綠色和紅色曲線更接近對(duì)齊。但是通過(guò)改變女孩的預(yù)測(cè)分?jǐn)?shù),在每個(gè)箱中,男孩和女孩之間的積極預(yù)測(cè)與箱中孩子數(shù)量的比率現(xiàn)在非常不同。女孩得到的蘋(píng)果會(huì)比她們喜歡的少。這種差異反映在陽(yáng)性預(yù)測(cè)比率曲線中,這些曲線現(xiàn)在明顯分開(kāi)。它們之間的差距提供了 1.0 的 PPRS,這是預(yù)測(cè)偏差的重要指標(biāo)。
條件 5。均勻隨機(jī)化女孩:**這個(gè)實(shí)驗(yàn)從女孩和男孩的相同均勻發(fā)生器分布開(kāi)始,與條件 1 相同。除了這一次,一半的女孩被隨機(jī)選中,并被分配一個(gè)隨機(jī)預(yù)測(cè)分?jǐn)?shù)。你可以看到女孩的積極和消極結(jié)果分布(紅色和綠色曲線)變平了。ROC AUC(曲線下面積)下降,越來(lái)越少的女孩得到她們喜歡的零食。PPRS 是相對(duì)較高的 0.75。
這個(gè)項(xiàng)目的 GitHub repo 中提供了使用您自己版本的生成器發(fā)行版來(lái)生成蘋(píng)果點(diǎn)心樣本的 Python 代碼[4]。
我們可以在混淆矩陣儀表板中檢查真實(shí)數(shù)據(jù)。一個(gè)眾所周知的數(shù)據(jù)集列出了 1912 年泰坦尼克號(hào)沉沒(méi)時(shí)幸存和遇難的乘客。對(duì)于每位乘客,數(shù)據(jù)集將年齡、性別、家庭規(guī)模、票價(jià)等級(jí)和票價(jià)等特征制成表格。泰坦尼克號(hào)的生存預(yù)測(cè)任務(wù)是 Kaggle.com 號(hào)的一個(gè)開(kāi)始項(xiàng)目,80%的準(zhǔn)確率是典型的。對(duì)于這個(gè)數(shù)據(jù)集,我建立了兩個(gè)模型;他們的預(yù)測(cè)包含在混淆矩陣儀表板中。一個(gè)簡(jiǎn)單的模型是邏輯回歸,它為每個(gè)可能的特征值計(jì)算一個(gè)權(quán)重因子(在一些簡(jiǎn)單的特征工程之后)。更復(fù)雜的機(jī)器學(xué)習(xí)算法是梯度推進(jìn)回歸器。這使用了決策樹(shù)的集合,并且可以考慮觀察到的特征之間的復(fù)雜非線性相互作用。對(duì)于該數(shù)據(jù)集和特征,GBR 模型的表現(xiàn)略好于邏輯回歸,AUC 為. 86,最佳 f1 值為. 78(決策閾值= 4)。
泰坦尼克號(hào)的生存——梯度推進(jìn)回歸模型。
泰坦尼克號(hào)模型展示了許多有趣的特性。男性的存活率為 19%,而女性為 74%。女人和孩子先上救生艇!適當(dāng)?shù)?#xff0c;預(yù)測(cè)算法顯示兩個(gè)相距很遠(yuǎn)的凸起。查看男性和女性數(shù)據(jù)子集,綠色的陰性結(jié)果沖擊發(fā)生在男性亞群中,而紅色的陽(yáng)性結(jié)果沖擊發(fā)生在女性中。在中點(diǎn)決策閾值為 5 時(shí),女性的真實(shí)陽(yáng)性率(預(yù)測(cè)存活,并且確實(shí)存活)和男性的真實(shí)陰性率(預(yù)測(cè)不存活,并且沒(méi)有存活)都非常高。男性和女性乘客的假陽(yáng)性和假陰性率高度不對(duì)稱(FNR = .79(m)/.1(f),FPR = .02(m)/.58(f))。這反映了大多數(shù)男性的生存概率較低,而大多數(shù)女性的生存概率較低,盡管兩個(gè)方向都有異常值。由于提供了相對(duì)簡(jiǎn)單的乘客特征集,模型無(wú)法可靠地預(yù)測(cè)異常值。在這些泰坦尼克號(hào)生存模型的男性/女性分類下,陽(yáng)性預(yù)測(cè)比率曲線和 PPRS 不能提供信息,因?yàn)榻Y(jié)果分布幾乎沒(méi)有重疊,為比較中等范圍分?jǐn)?shù)倉(cāng)中的陽(yáng)性預(yù)測(cè)比率留下非常稀疏的統(tǒng)計(jì)數(shù)據(jù)。
2016 年 5 月, ProPublica 發(fā)表了一項(xiàng)名為“機(jī)器偏見(jiàn):全國(guó)各地都有用來(lái)預(yù)測(cè)未來(lái)罪犯的軟件。而且對(duì)黑人有偏見(jiàn)。”【5】。這篇文章評(píng)估了一種叫做 COMPAS 的算法,該算法用于預(yù)測(cè)刑事案件中的累犯率。伴隨本文的是一個(gè) github 知識(shí)庫(kù),其中包含了用于評(píng)估 COMPAS 算法性能的數(shù)據(jù)和數(shù)據(jù)分析方法。
ProPublica 的文章提出了以下主張:
正如霍爾德所擔(dān)心的那樣,我們還發(fā)現(xiàn)了明顯的種族差異。在預(yù)測(cè)誰(shuí)會(huì)再次犯罪時(shí),該算法對(duì)黑人和白人被告犯錯(cuò)誤的比率大致相同,但方式非常不同。
- 該公式特別容易錯(cuò)誤地將黑人被告標(biāo)記為未來(lái)的罪犯,錯(cuò)誤地將他們標(biāo)記為白人被告的比例幾乎是白人被告的兩倍。
- 白人被告比黑人被告更容易被誤標(biāo)為低風(fēng)險(xiǎn)?!?/strong>
關(guān)于算法偏差的說(shuō)法令人擔(dān)憂,這篇文章被大量引用。畢竟,公平起見(jiàn),在無(wú)偏算法下,我們可能期望兩個(gè)方向上的誤差平均分布。ProPublica 的指控是基于黑人和白人亞群混淆矩陣中假陽(yáng)性率和假陰性率的差異。
然而,我們從蘋(píng)果零食的例子中看到,對(duì)偏見(jiàn)或不公平的解釋并不簡(jiǎn)單?;颈嚷?、混淆矩陣中的正比率和負(fù)比率以及條件使用度量(其中最著名的是精確度(PPV),但也包括負(fù)預(yù)測(cè)值(NPV)、錯(cuò)誤遺漏率(FOR)和錯(cuò)誤發(fā)現(xiàn)率(FDR))之間存在很強(qiáng)的相互作用。犯罪學(xué)、統(tǒng)計(jì)學(xué)和計(jì)算機(jī)科學(xué)文獻(xiàn)已經(jīng)詳細(xì)討論了這些算法之間的權(quán)衡,COMPAS 算法的公平性也引起了激烈的爭(zhēng)論[1,6,7,8,9]。蘋(píng)果零食的例子表明,不同群體之間偏好分布或結(jié)果概率的差異本身并不是預(yù)測(cè)偏差的指標(biāo)。總的來(lái)說(shuō),不管出于什么原因,參加野餐的女孩可能比男孩更喜歡蘋(píng)果零食。
我們可以使用混淆矩陣儀表板查看布勞沃德縣累犯數(shù)據(jù),并測(cè)試不同的決策閾值如何影響混淆矩陣及其導(dǎo)數(shù)分?jǐn)?shù)。布勞沃德縣的 COMPAS 決策閾值設(shè)定在十分位數(shù) 4。ProPublica 數(shù)據(jù)集不僅提供了由 COMPAS 算法產(chǎn)生的累犯預(yù)測(cè),還提供了實(shí)際的預(yù)測(cè)分?jǐn)?shù),這些分?jǐn)?shù)被稱為“十分位數(shù)”,因?yàn)?COMPAS 報(bào)告的預(yù)測(cè)分?jǐn)?shù)范圍是從 1 到 10。該信息還允許我們比較亞群體間的陽(yáng)性預(yù)測(cè)率曲線,并計(jì)算 PPRS(陽(yáng)性預(yù)測(cè)率得分)。
檢查混淆矩陣儀表板中的數(shù)據(jù)源 Broward recipiency-COMPAS 模型,我們證實(shí),的確,在閾值為 4 時(shí),黑人被告的假陽(yáng)性率為. 42,而白人被告的假陽(yáng)性率僅為. 22。白人被告的假陰性率是 0.5,而黑人被告的假陰性率是 0.28。
這種差異必須根據(jù)黑人被告的基本稅率為 0.52,而白人被告的基本稅率為 0.39 這一事實(shí)來(lái)評(píng)估。這反映在黑人被告堆積柱狀圖中紅色(正)柱的數(shù)量更大。然而,類似于我們?cè)谔O(píng)果零食實(shí)驗(yàn)條件 3 中看到的,這種差異可以通過(guò)將黑人被告的決策閾值向上調(diào)整到 5,將白人被告的決策閾值向下調(diào)整到 3 來(lái)消除。這使兩個(gè)群體的 TPR/FPR 點(diǎn)在 ROC 曲線上一致,盡管它進(jìn)一步加劇了精確度和陰性預(yù)測(cè)值的差異。顯然,為不同的受保護(hù)群體設(shè)置不同的門(mén)檻會(huì)被認(rèn)為是不公平的。
問(wèn)題是,FPR 和 TPR 的差異是由于預(yù)測(cè)偏差,還是由于兩個(gè)亞人群之間環(huán)境特征的差異?值得注意的是,COMPAS 算法根據(jù)兩組的實(shí)際累犯結(jié)果一致地分配預(yù)測(cè)分?jǐn)?shù)。陽(yáng)性預(yù)測(cè)比率曲線非常好地對(duì)齊,并且它們之間的間隙的 PPRS 測(cè)量獲得相對(duì)小的值 0.17,表明良好的校準(zhǔn)準(zhǔn)確度。
布勞沃德累犯模型。
COMPAS 算法在 1-10 的十分位數(shù)范圍內(nèi)分配相對(duì)均勻的預(yù)測(cè)分?jǐn)?shù);與蘋(píng)果零食合成數(shù)據(jù)不同,分布不是鐘形的。除了基本比率之外,黑人和白人被告人群之間最明顯的差異是黑人被告被分配到大致相同的位置,而白人被告被發(fā)現(xiàn)在較低的十分位數(shù)分?jǐn)?shù)中所占比例更大,隨著十分位數(shù)分?jǐn)?shù)的增加而穩(wěn)步下降。您可以使用混淆矩陣儀表板的近似線性數(shù)據(jù)源下拉菜單來(lái)近似這些分布,并查看混淆矩陣中的項(xiàng)如何響應(yīng)。
調(diào)查累犯數(shù)據(jù)集的另一種方法是建立一個(gè)獨(dú)立的模型,保證排除種族因素。假設(shè)我們觀察到累犯與種族或性取向相關(guān)。那么這些因素實(shí)際上將是累犯的預(yù)測(cè)因素,在統(tǒng)計(jì)基礎(chǔ)上。但是,在一個(gè)公平的社會(huì)中,我們同意應(yīng)該根據(jù)個(gè)人的優(yōu)點(diǎn)而不是根據(jù)他們碰巧屬于哪個(gè)身份階層來(lái)判斷個(gè)人。
ProPublica 報(bào)道說(shuō),在大多數(shù)被告被關(guān)進(jìn)監(jiān)獄的時(shí)候,他們會(huì)回答 COMPAS 的調(diào)查問(wèn)卷。這些信息被輸入到 COMPAS 算法中。不清楚該算法到底使用了什么信息。如果使用種族或其他受保護(hù)的階級(jí)因素,那么這可能是不公平的。
為了消除這種可能性,我們可以只提取直接基于犯罪記錄的數(shù)據(jù),并從中建立一個(gè)模型。與泰坦尼克號(hào)數(shù)據(jù)一樣,我建立了線性回歸模型和梯度推進(jìn)回歸模型。作為比較,兩者都包含在混淆矩陣儀表板中。我僅從數(shù)據(jù)記錄中提取了以下特征:
- 年齡
- 少年 _ 惡魔 _ 計(jì)數(shù)
- juv_misd_count
- 青少年 _ 其他 _ 計(jì)數(shù)
- 先驗(yàn)計(jì)數(shù)
- 電荷度
- desc 充電
這些特征與年齡、前科和指控類型有關(guān)。在此數(shù)據(jù)集中,預(yù)訂時(shí)只輸入了一項(xiàng)費(fèi)用,因此原始 c_charge_degree 和 c_charge_desc 要素有且只有一個(gè)值。
為了在算法中使用這樣的特征,數(shù)據(jù)科學(xué)家將它們轉(zhuǎn)換成可能與我們想要預(yù)測(cè)的結(jié)果相關(guān)的數(shù)字。因此,我做了一些特征工程。我將原始年齡分為五個(gè)年齡組:{ 18–22,23–33,34–50,51–59,60+}我將計(jì)數(shù)特征分為四個(gè)或五個(gè)類別的組。對(duì)于電荷描述,我創(chuàng)建了一個(gè)“一鍵”向量。我把所有與毒品相關(guān)的指控歸為一項(xiàng)。我將少于 10 個(gè)實(shí)例的所有費(fèi)用描述歸入一個(gè)名為“其他”的費(fèi)用類別。然后,對(duì)于每個(gè)類別,如果該費(fèi)用在原始“c_charge_desc”特征中報(bào)告,則我指定 1,否則指定 0。最后,我加入了一個(gè)數(shù)字特征,這是適用的指控描述的平均累犯率。
為了訓(xùn)練模型,我們注意到報(bào)告變量的觀察值‘two _ year _ recid’。如果被告再犯,結(jié)果值(或因變量)為 1,如果他們?cè)趦赡陜?nèi)沒(méi)有再犯,結(jié)果值為 0。
在預(yù)測(cè)時(shí),獨(dú)立特征被輸入到模型中以產(chǎn)生預(yù)測(cè)分?jǐn)?shù)。下面是 GBR 模型的結(jié)果,顯示在混淆矩陣儀表板中。預(yù)測(cè)分布的形狀不同于 COMPAS 模型。但是黑人被告和白人被告之間假陽(yáng)性率和真陽(yáng)性率的差距仍然存在。與 COMPAS 模型一樣,通過(guò)為兩個(gè)子群體選擇不同的決策閾值(這被認(rèn)為是不公平的),可以使這些混淆矩陣條目一致。最后,與 COMPAS 模型一樣,陽(yáng)性預(yù)測(cè)比率曲線排列良好,預(yù)測(cè)偏差的 PPRS 較低,徘徊在約 0.09。同樣,這是排除了種族和性別特征的模型。
預(yù)測(cè)模型的一個(gè)問(wèn)題是數(shù)據(jù)泄漏。盡管種族、性別或其他受保護(hù)的特征可能被正式排除在考慮之外,但這些因素有時(shí)可以從其他因素中推斷出來(lái)。例如,眾所周知,在設(shè)定保險(xiǎn)費(fèi)率時(shí),郵政編碼紅線被用作種族的替代特征。
在女孩和男孩具有不同特征生成器分布的合成蘋(píng)果零食數(shù)據(jù)的情況下,人們可能會(huì)將年齡、身高、老師和寵物這些看似良性的特征解釋為孩子性別的反向通道指標(biāo)。沒(méi)關(guān)系。即使你直接把性別作為一個(gè)特征包括進(jìn)來(lái),女生和男生分布的形狀還是一樣的。我們?cè)谔O(píng)果零食條件 4 和 5 中實(shí)現(xiàn)預(yù)測(cè)偏差的方式不是通過(guò)在預(yù)測(cè)分布的形成中引入性別因素,而是通過(guò)干擾預(yù)測(cè)分?jǐn)?shù)的應(yīng)有值。
在布勞沃德累犯數(shù)據(jù)的情況下,有可能使用諸如年齡、前科、指控嚴(yán)重程度等特征。反映了刑事司法系統(tǒng)或社會(huì)中的種族偏見(jiàn)。我們不能在這里解決這些因素,我們也不能對(duì)基礎(chǔ)數(shù)據(jù)或整個(gè)刑事司法系統(tǒng)的公正性下結(jié)論。在這里,我們只是根據(jù)收集的數(shù)據(jù)集,關(guān)注對(duì)未來(lái)實(shí)際記錄在案的累犯的預(yù)測(cè)。
我的結(jié)論是,布勞沃德預(yù)測(cè)算法是而不是有偏的,因?yàn)樗鼈冊(cè)谶@兩個(gè)亞群體之間的預(yù)測(cè)分?jǐn)?shù)有差異分布。在保留基本比率(再分(紅色)和非再分(綠色)計(jì)數(shù)的總數(shù))的同時(shí),將被告鏟到預(yù)測(cè)得分軸的其他地方,會(huì)扭曲相應(yīng)的正預(yù)測(cè)比率曲線,并增加預(yù)測(cè)偏差的 PPRS 度量。更正確的解釋是,根據(jù)獲取數(shù)據(jù)特征和結(jié)果的方式,黑人被告亞群固有地表現(xiàn)出更大比例的特征,這些特征將他們置于更高的預(yù)測(cè)分?jǐn)?shù)。FPR、TPR 和有條件使用措施的差異是其不可避免的后果。
這將是一個(gè)很好的逃避難題的選擇不相容的和令人困惑的所謂偏見(jiàn)的措施僅僅基于混淆矩陣和它的衍生指標(biāo)。在這篇文章中,我提出了一個(gè)新的預(yù)測(cè)偏差的衡量標(biāo)準(zhǔn),積極預(yù)測(cè)比得分(PPRS)。這更直接地比較了作為亞群體間預(yù)測(cè)得分函數(shù)的結(jié)果的一致性,而不考慮控制混淆矩陣中術(shù)語(yǔ)的決策閾值。PPRS 測(cè)量與校準(zhǔn)準(zhǔn)確度一致,并且當(dāng)群體具有不同的基礎(chǔ)率和分布時(shí),它不試圖校正由于在決策閾值中進(jìn)行選擇而產(chǎn)生的比率差異。根據(jù)這一標(biāo)準(zhǔn),在 Broward 累犯數(shù)據(jù)中觀察到的種族群體之間的差異是由于其特征特性的環(huán)境分布的差異,而不是由于任何預(yù)測(cè)算法的偏見(jiàn)。
公平合理地使用算法和數(shù)據(jù)是一個(gè)巨大而困難的問(wèn)題。社會(huì)通過(guò)無(wú)數(shù)的數(shù)據(jù)收集和決策過(guò)程發(fā)揮作用。早在信息時(shí)代到來(lái)之前,規(guī)則、指導(dǎo)方針和程序就已經(jīng)進(jìn)化到在經(jīng)濟(jì)和治理方面取得系統(tǒng)性成果。從這個(gè)意義上說(shuō),當(dāng)人類遵循既定的政策時(shí),他們是在執(zhí)行一種算法決策。人類的判斷帶有主觀性的好處和代價(jià)。除了嚴(yán)格的規(guī)則和正式的指導(dǎo)方針之外,人們還能夠考慮那些數(shù)字和分類賬不容易捕捉到的因素。因此,他們可能會(huì)有意識(shí)或無(wú)意識(shí)地權(quán)衡超出合法范圍的因素。他們帶來(lái)同情和洞察力,怨恨和怨恨。
形式化數(shù)據(jù)收集和算法的一個(gè)承諾就是效率和規(guī)模。要素的數(shù)量以及處理它們的速度和效率遠(yuǎn)遠(yuǎn)超過(guò)了訓(xùn)練有素的專業(yè)人員、官員和代理人的能力。
算法的第二個(gè)承諾是,它們?cè)试S在決策過(guò)程中控制因素和一致性。輸入變量可能不會(huì)對(duì)人類背景故事進(jìn)行編碼,而人類背景故事可能會(huì)令人同情地左右決策。但是他們也排除了基于不公正的偏見(jiàn)而影響決策的因素。形式化算法的影響必須在系統(tǒng)層面進(jìn)行評(píng)估。這包括理解如何收集數(shù)據(jù),如何從數(shù)據(jù)中提取特征,以及如何做出算法決策。
因?yàn)橛?jì)算算法采用了普通人不熟悉的技術(shù),有時(shí)甚至連專家都難以完全理解或解釋的過(guò)程(如一些機(jī)器學(xué)習(xí)算法),所以它們受到懷疑和審查是自然和適當(dāng)?shù)?。?dāng)算法因?yàn)橛衅畹臄?shù)據(jù)或設(shè)計(jì)不當(dāng)而做出糟糕的決策時(shí),就必須被叫出來(lái)。相反,算法不應(yīng)該因?yàn)檎_計(jì)算出反映其系統(tǒng)環(huán)境令人不快的屬性的結(jié)果而受到誹謗。這樣做將會(huì)失去一個(gè)強(qiáng)大的工具,這個(gè)工具能夠消除偏見(jiàn)和成見(jiàn),增加社會(huì)的公平性。
混淆矩陣是一個(gè)相對(duì)簡(jiǎn)單的概念,無(wú)論預(yù)測(cè)分?jǐn)?shù)是通過(guò)機(jī)器算法還是其他方式分配的。但是它在不同類型的數(shù)據(jù)下的行為是微妙而復(fù)雜的。通過(guò)交互式混淆矩陣儀表板,我們打算讓算法和人類預(yù)測(cè)和決策的行為更加容易理解和透明。
*[1] R. Berk,H. Heidari,S. Jabbari,M. Kearns 和 A. Roth,《刑事司法風(fēng)險(xiǎn)評(píng)估中的公平性:現(xiàn)狀》,*社會(huì)學(xué)方法&研究,第 1–42 頁(yè),2017 年。
[2] J. Kleinberg、S. Mullainathan 和 M. Raghavan,“公平確定風(fēng)險(xiǎn)分值的內(nèi)在權(quán)衡”,載于第八屆會(huì)議。論理論計(jì)算機(jī)科學(xué)的創(chuàng)新(ITCS)* ,2017。*
[3] S. Goel,E. Pierson 和 S. Corbett-Davies,“算法決策和公平的成本”,載于2017 年第 23 屆 ACM SIGKDD 知識(shí)發(fā)現(xiàn)和數(shù)據(jù)挖掘國(guó)際會(huì)議*。*
[4] E .索恩,“索恩/算法偏差”,2020 年。【在線】??捎?https://github.com/saund/algorithmic-bias。
[5] J. Angwin、J. Larson、S. Mattu 和 L. Kirchner,“機(jī)器偏見(jiàn):全國(guó)各地都有用來(lái)預(yù)測(cè)未來(lái)罪犯的軟件。而且對(duì)黑人有偏見(jiàn)”2016 年 5 月?!驹诰€】。可用:https://www . propublica . org/article/machine-bias-risk-assessments-in-criminal-pending/。
*[6] A. Flores,K. Bechtel 和 C. Lowenkamp,“假陽(yáng)性、假陰性和假分析:對(duì)《機(jī)器偏見(jiàn):全國(guó)各地都有用來(lái)預(yù)測(cè)未來(lái)罪犯的軟件》的反駁。而且對(duì)黑人有偏見(jiàn)。”、“*聯(lián)邦緩刑,2016 年第 80 卷。
[7] W. Dieterich,C. Mendoza 和 T. Brennan,“COMPAS 風(fēng)險(xiǎn)量表:證明準(zhǔn)確性、公平性和預(yù)測(cè)性”,2016 年 7 月 8 日?!驹诰€】??捎?https://www . document cloud . org/documents/2998391-ProPublica-commentation-Final-070616 . html .
[8] J. Angwin 和 J. Larson,“ProPublica 回應(yīng)公司對(duì)機(jī)器偏見(jiàn)故事的批評(píng)”,2016 年 7 月 29 日?!驹诰€】??捎?https://www . propublica . org/article/propublica-responses-to-companies-critical-of-machine-bias-story。
[9] J. Angwin 和 J. Larson,“研究人員說(shuō),犯罪風(fēng)險(xiǎn)得分的偏差在數(shù)學(xué)上是不可避免的”,2016 年 12 月 30 日。【在線】??捎?https://www . propublica . org/article/bias-in-criminal-risk-scores-is-mathematical-ability-researchers-say。
原文:https://towardsdatascience.com/algorithmic-color-palettes-a110d6448b5d?source=collection_archive---------29-----------------------
由特雷·拉特克利夫 ( 來(lái)源)用我生成的調(diào)色板拍攝的照片。
我最近在做一個(gè)項(xiàng)目,在這個(gè)項(xiàng)目中,我希望能夠比較圖像的外觀和感覺(jué),這促使我尋找一種使用機(jī)器學(xué)習(xí)來(lái)創(chuàng)建調(diào)色板的方法。
生成調(diào)色板可以被認(rèn)為是一個(gè)偽裝的聚類問(wèn)題。我們希望將一幅圖像的所有像素劃分成最能代表該圖像的 k 個(gè)不同的組。
來(lái)源:維基百科–RGB 色彩空間
我們可以把我們的圖像看作是在 3D 色彩空間中繪制的點(diǎn)的陣列,而不是把我們的圖像看作是像素的網(wǎng)格——每個(gè)像素都有一個(gè)紅色、綠色和藍(lán)色的值。紅色有一個(gè)維度,綠色有一個(gè)維度,藍(lán)色有一個(gè)維度,在每個(gè)維度中,一個(gè)點(diǎn)可以位于和之間的任何位置。
假設(shè)我們希望創(chuàng)建一個(gè)由 8 種顏色組成的調(diào)色板來(lái)代表每張圖片。這意味著我們想要找到 8 個(gè)能夠給出每幅圖像的最佳可能表示的聚類或分區(qū)。
有許多不同的聚類算法可供選擇——每種算法都有自己的優(yōu)缺點(diǎn)——但是為了這個(gè)項(xiàng)目的目的,我嘗試了 K-Means 聚類和凝聚聚類。
我從電影只有上帝寬恕(2013) (使用網(wǎng)站 FILMGRAB )中挑選了 5 張樣本劇照,因?yàn)樗胸S富的調(diào)色板。
仍然來(lái)自只有上帝寬恕(2013) ,由 FILMGRAB 提供,使用 k-means 生成調(diào)色板。
上面是一個(gè)使用 K-Means 生成的電影靜止圖像和調(diào)色板的例子。正如你所看到的,該算法做了一個(gè)相當(dāng)好的工作,沒(méi)有太多的超參數(shù)調(diào)整,使一個(gè)很好的代表性調(diào)色板。此外,它允許您指定調(diào)色板的大小——這是其他一些聚類算法(例如 DBSCAN)所不具備的。
你可以在我的筆記本中看到更多生成調(diào)色板的例子。
事實(shí)證明,像 K-Means 這樣的算法更喜歡高容量的顏色,而不是稀疏但突出的顏色。例如,參見(jiàn)下面的靜止圖像。
仍然來(lái)自《只有上帝寬恕》(2013) ,由 FILMGRAB 提供,使用 k-means 生成調(diào)色板。
K-Means 調(diào)色板可以很好地近似大多數(shù)顏色,但在查看圖像時(shí),您可能會(huì)期望它包含一些藍(lán)色(如摔倒的拳擊手的墊子或短褲上)或紅色(如繩子上,或站立的拳擊手的手套/服裝等)。
回想一下 K-Means 是如何工作的,該算法試圖將圖像中的顏色劃分為 k 組,由顏色空間中的 k 個(gè)平均點(diǎn)表示。在這種情況下,圖像中沒(méi)有足夠的藍(lán)色或紅色被算法提取出來(lái),所以它們被其他類似的、更豐富的顏色洗掉了。
為了解決這個(gè)問(wèn)題,我們可以嘗試一些方法。
仍然來(lái)自《只有上帝寬恕》(2013) ,由 FILMGRAB 提供,使用 K-Means 和聚合生成的調(diào)色板。
上圖顯示了使用 K-Means 和凝聚聚類生成的調(diào)色板。凝聚聚類選擇在調(diào)色板中包括藍(lán)色,盡管它失去了柔和的黃色,仍然沒(méi)有包括任何紅色。
仍然來(lái)自O(shè)nly God forgible(2013),由 FILMGRAB 提供,帶有 k-means RGB 和 HSV 生成的調(diào)色板。
另一種方法是將圖像的顏色從轉(zhuǎn)換為。將顏色表示為紅色、綠色和藍(lán)色通道強(qiáng)度的組合,而將顏色表示為色調(diào)(基色的光譜)、飽和度(顏色的強(qiáng)度)和值(顏色的相對(duì)亮度或暗度)——你可以在這里了解更多關(guān)于的信息。上圖顯示了使用 K-Means 聚類和顏色和顏色為同一幅圖像生成的調(diào)色板。正如你所看到的,HSV 方法包括藍(lán)色和黃色(盡管仍然沒(méi)有紅色)。
為了進(jìn)一步改善結(jié)果,一些選項(xiàng)包括組合技術(shù)(即凝聚聚類+ HSV 顏色),超參數(shù)調(diào)整,使用不同的算法(如 DBSCAN),以及調(diào)整顏色距離度量(如果你感興趣,可以在這里閱讀更多關(guān)于顏色差異的信息)。
作為最后的獎(jiǎng)勵(lì),我決定創(chuàng)建一個(gè)簡(jiǎn)單的概念驗(yàn)證 API,用于從圖像生成調(diào)色板。API 將圖像 URL 作為參數(shù),并使用 K-Means 生成調(diào)色板。
此外,我發(fā)現(xiàn)網(wǎng)站 Coolors 使得創(chuàng)建調(diào)色板 URL 變得很容易,因此 API 可以將調(diào)色板作為顏色的 2D 數(shù)組或 Coolors 調(diào)色板的 URL 返回。
例如,使用此圖像…
還是出自只有上帝會(huì)原諒(2013) ,承蒙 FILMGRAB
API 將產(chǎn)生以下鏈接…
[## Coolors.co
在 Coolors.co 上查看和編輯調(diào)色板或創(chuàng)建自己的配色方案。
coolors.co](https://coolors.co/3c030b-050002-3967cd-152f63-760102-7e504c-110c33-b4d1df)
一起看,你會(huì)得到…
仍然來(lái)自《只有上帝寬恕》(2013) ,由 FILMGRAB 提供,k-means 生成調(diào)色板由 Coolors 提供。
你可以在我的 GitHub repo 里查看 Flask app,這里。
這是一個(gè)很短但很有趣的副業(yè),這里肯定還有很多值得探索的地方。如果你認(rèn)為你可能會(huì)感興趣,一定要去看看電影抓取和酷人。
你可以在 GitHub 上找到我的代碼,或者用 nbviewer 或 Binder 查看筆記本。
感謝閱讀!我很想聽(tīng)聽(tīng)你的想法。請(qǐng)?jiān)谙旅姘l(fā)表評(píng)論,或者在 LinkedIn 或 Twitter 上聯(lián)系我。
原文:https://towardsdatascience.com/algorithmic-complexity-244bde1c3548?source=collection_archive---------43-----------------------
扎卡里的空手道俱樂(lè)部網(wǎng)絡(luò)與 2 個(gè)社區(qū)確定。
由于真實(shí)網(wǎng)絡(luò)的規(guī)模,使用強(qiáng)力算法來(lái)定義社區(qū)有時(shí)是不可行的。用于處理這些問(wèn)題的算法,在最好的情況下,在多項(xiàng)式時(shí)間內(nèi)運(yùn)行。雖然,大多數(shù)時(shí)候,有必要探索隨著網(wǎng)絡(luò)規(guī)模增長(zhǎng)的指數(shù)數(shù)量的可能性。第一個(gè)問(wèn)題叫做 P 問(wèn)題,第二個(gè)問(wèn)題叫做 NP 問(wèn)題。
在接下來(lái)的章節(jié)中,我們將探究 P = NP 的問(wèn)題,并大致介紹這種證實(shí)或反駁的后果。之后,介紹了一個(gè)根據(jù)算法的速度和內(nèi)存需求來(lái)描述算法復(fù)雜性的系統(tǒng)——Big-O 符號(hào)。
P vs NP 問(wèn)題由 Stephen Cook [1]于 1971 年提出,并在 2000 年被認(rèn)為是計(jì)算機(jī)科學(xué)中最重要的公開(kāi)問(wèn)題之一[2]。這是克萊數(shù)學(xué)研究所定義的七個(gè)千年獎(jiǎng)問(wèn)題[3]中的六個(gè)問(wèn)題之一。能夠解決其中一個(gè)問(wèn)題的人將獲得 100 萬(wàn)美元的獎(jiǎng)金。 P vs NP 問(wèn)題可以表述為:每一個(gè)其解可以被計(jì)算機(jī)快速驗(yàn)證的問(wèn)題是否也可以被計(jì)算機(jī)快速求解?【4】。
P 問(wèn)題的特征在于可通過(guò)確定性圖靈機(jī)(DTM)在多項(xiàng)式時(shí)間內(nèi)求解。另一方面, NP 范疇包括那些僅使用非確定性圖靈機(jī)(NTM)在多項(xiàng)式時(shí)間內(nèi)可解的。它們都是一組二元決策問(wèn)題的一部分。DTM 是一臺(tái)沒(méi)有分支的機(jī)器,每次只能進(jìn)行下一步。這是一臺(tái)普通電腦的工作原理。NTM 是一臺(tái)概念性的機(jī)器,能夠在每一步同時(shí)分析多項(xiàng)式數(shù)量的不同選項(xiàng)。因此,一個(gè)分支裝置。一個(gè)快速驗(yàn)證的解意味著它可以在多項(xiàng)式時(shí)間內(nèi)找到。計(jì)算機(jī)這個(gè)詞指的是決定性的圖靈機(jī)(DTM)。
雖然 P = NP 這個(gè)問(wèn)題還沒(méi)有答案,但是根據(jù)定義,這兩個(gè)組之間存在聯(lián)系。 NP 問(wèn)題包括那些在 DTM 中其解可能無(wú)法得到但可以在多項(xiàng)式時(shí)間內(nèi)驗(yàn)證的問(wèn)題。這意味著每一個(gè) P 問(wèn)題都屬于 NP 問(wèn)題,驗(yàn)證一個(gè)解決方案總是比找到它容易。他們可以在多項(xiàng)式時(shí)間內(nèi)找到它。平凡地,𝑃 ? 𝑁𝑃.
一類不同的問(wèn)題是 NP 完全問(wèn)題。不僅是 NP,也是 NP 難(圖 1)。當(dāng)一個(gè)屬于 NP 的算法可以化簡(jiǎn)為第一類中的另一個(gè)算法時(shí),問(wèn)題就是 NP 難的。這意味著 NP-hard 類中的任何問(wèn)題至少和 NP 中的任何問(wèn)題一樣難解決。簡(jiǎn)化項(xiàng)意味著問(wèn)題𝐴的輸入可以使用多項(xiàng)式時(shí)間算法轉(zhuǎn)換為問(wèn)題𝐵的輸入,并提供完全相同的輸出。如果𝐴被簡(jiǎn)化為𝐵,這將會(huì)帶來(lái)幾個(gè)直接的后果:
- If𝐵∈𝑃,然后是𝐴∈𝑃;
- If𝐵∈𝑁𝑃,然后是𝐴∈𝑁𝑃;
- 如果𝐴是 NP 難的,那么𝐵就是 NP 難的。
因此,如果找到了 NP 完全問(wèn)題的多項(xiàng)式時(shí)間的解,那么 P 對(duì) NP 問(wèn)題被解決,并且𝑃 = 𝑁𝑃.因此,不僅找到多項(xiàng)式解,而且證明𝑋問(wèn)題是 NP 完全的也是基本的。根據(jù)上述定義,這可以分為兩個(gè)步驟:
- 顯示𝑋屬于 NP。這可以通過(guò)在多項(xiàng)式時(shí)間內(nèi)驗(yàn)證給定的解或找到𝑋的非確定性算法來(lái)完成;
- 展示𝑋是 NP 難的。通過(guò)將一個(gè)已知的 NP 完全問(wèn)題簡(jiǎn)化為𝑋.問(wèn)題在這種情況下,上面得到的第三個(gè)結(jié)果意味著𝑋是 NP 難的。
圖 1 P vs NP 問(wèn)題圖示表示[5]。
盡管沒(méi)有得到證實(shí),但大多數(shù)計(jì)算機(jī)科學(xué)家𝑃 =? 𝑁𝑃相信這一點(diǎn)[6]。證明𝑃 = 𝑁𝑃將在現(xiàn)實(shí)世界中產(chǎn)生重要的影響。不僅生物模型將得到加強(qiáng),而且運(yùn)輸系統(tǒng)、多媒體處理、經(jīng)濟(jì)模擬等方面的效率也將大大提高。另一方面,有基于𝑃 =? 𝑁𝑃.事實(shí)的真實(shí)系統(tǒng)其中之一是現(xiàn)代密碼系統(tǒng),它依靠質(zhì)因數(shù)分解來(lái)保護(hù)數(shù)據(jù)。這個(gè)問(wèn)題被認(rèn)為是 NP 。
網(wǎng)絡(luò)科學(xué)中很大一部分問(wèn)題是 NP、NP 難或 NP 完全的。因此,該解決方案在例如尋找系統(tǒng)發(fā)育網(wǎng)絡(luò)中的社區(qū)中的重要性就不足為奇了。
接下來(lái)給出算法時(shí)間/存儲(chǔ)器復(fù)雜性的數(shù)學(xué)表示。
在分析算法性能時(shí),通常會(huì)考慮時(shí)間和內(nèi)存的復(fù)雜性。當(dāng)計(jì)算能力有限,需要進(jìn)行大數(shù)據(jù)分析時(shí),它們尤為重要。
在某些情況下,同一問(wèn)題的解決方案可以在不同的時(shí)間范圍內(nèi)找到。出于這個(gè)原因,重要的是要有一種方法來(lái)上限綁定算法的執(zhí)行時(shí)間,而且要估計(jì)它的平均值。這導(dǎo)致了 Big-O 符號(hào)的產(chǎn)生。
根據(jù)算法必須執(zhí)行的指令數(shù)量和輸入的大小,運(yùn)行時(shí)間會(huì)有所不同。Big-O 符號(hào)提供了一種量化算法執(zhí)行需求的方法,獨(dú)立于運(yùn)行它的機(jī)器。確定的復(fù)雜度可以是線性的、對(duì)數(shù)的、二次的、三次的、指數(shù)的…表 1 給出了一個(gè)有序的列表,按照最常見(jiàn)算法的執(zhí)行時(shí)間(有一些例子)。
表 1 一些最知名的算法方法的時(shí)間復(fù)雜度。
在確定了算法的復(fù)雜性之后,就有可能預(yù)測(cè)執(zhí)行該算法的機(jī)器的時(shí)間和內(nèi)存需求。
一個(gè)函數(shù)𝑓(𝑁)稱為𝑂(𝑔(𝑁))如果常數(shù)𝑘和𝑁0 存在,使得 0 ≤ 𝑓(𝑁) ≤ 𝑘 × 𝑔(𝑁)對(duì)于全𝑁≥𝑁0 [12]。
[1] S. A. Cook,“定理證明程序的復(fù)雜性”,第三屆 ACM 計(jì)算理論年會(huì)論文集(STOC’71) ,1971 年。
[2] L. Fortnow,“P 與 NP 問(wèn)題的現(xiàn)狀”,《美國(guó)計(jì)算機(jī)學(xué)會(huì)通訊》,,第 52 卷,第 9 期,第 78–86 頁(yè),2009 年。
[3] C. M .研究所,“P 對(duì) NP 問(wèn)題”,[在線]??捎?https://www.claymath.org/millennium-problems/p-vs-NP-問(wèn)題。[訪問(wèn)日期:2019 年 5 月 15 日]。
[4] N. Viswarupan,“P vs NP 問(wèn)題”,Medium,2017 年 8 月 17 日?!驹诰€】??捎?https://medium.com/@niruhan/p-vs-np-problem-8d2b6fc2b697.【2019 年 5 月 15 日獲取】。
[5]“P 對(duì) NP 問(wèn)題”,維基百科,[在線]??捎?https://en.wikipedia.org/wiki/P_versus_NP_problem.【2019 年 5 月 12 日訪問(wèn)】。
[6] J. Rosenberger,“P 與 NP 民意測(cè)驗(yàn)結(jié)果”,*《美國(guó)計(jì)算機(jī)學(xué)會(huì)通訊》,*第 55 卷,第 5 期,第 10 頁(yè),2012 年。
[7] E. Ravasz,A. L. Somera,D. A. Mongru,Z. N. Oltvai 和 A. L. Baraba? si,“代謝網(wǎng)絡(luò)中模塊化的層次組織”,*《科學(xué)》,*第 297 卷,第 5586 期,第 1551-1555 頁(yè),2002 年。
[8] M. E.J .紐曼和 m .格文,“發(fā)現(xiàn)和評(píng)估網(wǎng)絡(luò)中的社區(qū)結(jié)構(gòu)”,*《物理評(píng)論》。統(tǒng)計(jì)、非線性和軟物質(zhì)物理學(xué),*第 69 卷,2004 年。
[9] M .格文和 M. E. J .紐曼,“社會(huì)和生物網(wǎng)絡(luò)中的社區(qū)結(jié)構(gòu)”,*美國(guó)國(guó)家科學(xué)院學(xué)報(bào),*第 99 卷,第 12 期,第 7821-7826 頁(yè),2002 年。
[10] M. E. J. Newman,“檢測(cè)網(wǎng)絡(luò)中社團(tuán)結(jié)構(gòu)的快速算法”,*物理評(píng)論 E,*2004 年第 69 卷第 6 期。
[11] G. Palla,I. Dere? nyi,I .法卡什和 T. Vicsek,“揭示自然和社會(huì)中復(fù)雜網(wǎng)絡(luò)的重疊社區(qū)結(jié)構(gòu)”,*《自然》,*第 435 卷,第 814-818 頁(yè),2005 年。
[12] T. H. Cormen,C. E. Leiserson,R. L. Rivest 和 C. Stein,《算法導(dǎo)論》,麻省劍橋:麻省理工學(xué)院出版社,2003 年。
原文:https://towardsdatascience.com/algorithmic-portfolio-hedging-9e069aafff5a?source=collection_archive---------6-----------------------
來(lái)自佩克斯的葉戈?duì)枴た妨蟹虻恼掌?/p>
來(lái)自《走向數(shù)據(jù)科學(xué)》編輯的提示: 雖然我們?cè)试S獨(dú)立作者根據(jù)我們的 規(guī)則和指導(dǎo)方針 發(fā)表文章,但我們并不認(rèn)可每個(gè)作者的貢獻(xiàn)。你不應(yīng)該在沒(méi)有尋求專業(yè)建議的情況下依賴一個(gè)作者的作品。詳見(jiàn)我們的 讀者術(shù)語(yǔ) 。
直接暴露于特殊和系統(tǒng)風(fēng)險(xiǎn)的股票。另一方面,期權(quán)不僅暴露于標(biāo)的資產(chǎn),還暴露于利率、時(shí)間和波動(dòng)性。這些風(fēng)險(xiǎn)是布萊克-斯科爾斯期權(quán)定價(jià)模型的輸入(參見(jiàn)推導(dǎo)布萊克-斯科爾斯模型)。由于這些輸入會(huì)影響所討論的期權(quán)的價(jià)值,函數(shù)的偏導(dǎo)數(shù)可以告訴我們,當(dāng)其中一個(gè)風(fēng)險(xiǎn)敞口發(fā)生變化,而其他風(fēng)險(xiǎn)敞口保持不變時(shí),期權(quán)的價(jià)值會(huì)如何變化。讓我們首先討論這個(gè)期權(quán)定價(jià)模型的所有偏導(dǎo)數(shù),然后用 Python 編寫(xiě)一個(gè)算法對(duì)沖系統(tǒng)。
使用泰勒級(jí)數(shù)展開(kāi),我們可以得到所有的希臘人。希臘人告訴我們,當(dāng)一個(gè)或多個(gè)期權(quán)敞口發(fā)生變化時(shí),我們可以預(yù)期一個(gè)期權(quán)或期權(quán)組合會(huì)發(fā)生變化。需要注意的是,所有一階近似都是線性的,而期權(quán)定價(jià)函數(shù)是非線性的。這意味著基礎(chǔ)參數(shù)偏離初始偏導(dǎo)數(shù)計(jì)算越多,它就越不精確。這就是為什么希臘人通常是實(shí)時(shí)更新的,所以當(dāng)某事發(fā)生變化時(shí),我們可以不斷地對(duì)期權(quán)或投資組合價(jià)值有一套新的預(yù)期(更多信息請(qǐng)參見(jiàn) Python 中的期權(quán)希臘人)。
注意:在以下情景中,我們通常會(huì)考慮看漲和看跌期權(quán),一些更高級(jí)的價(jià)差可能是多頭或空頭,具有不同的敞口平價(jià)。
Black-Scholes 方程的基礎(chǔ)資產(chǎn)的一階偏導(dǎo)數(shù)稱為 delta。Delta 是指當(dāng)基礎(chǔ)資產(chǎn)價(jià)格發(fā)生變化時(shí),期權(quán)價(jià)值如何變化。在其他參數(shù)保持不變的情況下,將 delta 乘以標(biāo)的資產(chǎn)的+/-1 美元的變化,將得到期權(quán)的新價(jià)值。對(duì)于多頭買(mǎi)入和空頭賣(mài)出頭寸,Delta 為正值,對(duì)于空頭買(mǎi)入和多頭賣(mài)出頭寸,Delta 為負(fù)值。
Black-Scholes 方程的基礎(chǔ)資產(chǎn)的二階偏導(dǎo)數(shù)稱為 gamma。Gamma 是指當(dāng)基礎(chǔ)資產(chǎn)價(jià)格發(fā)生變化時(shí),期權(quán)的 delta 如何變化。將 gamma 乘以標(biāo)的資產(chǎn)的+/-1 美元變化,保持所有其他參數(shù)不變,將得到期權(quán) delta 的新值。本質(zhì)上,gamma 告訴我們 delta 的變化率,給定基礎(chǔ)資產(chǎn)價(jià)格的±1 變化。對(duì)于多頭頭寸,Gamma 始終為正,對(duì)于空頭頭寸,Gamma 始終為負(fù)。
Black-Scholes 方程的基礎(chǔ)資產(chǎn)波動(dòng)率的一階偏導(dǎo)數(shù)稱為 vega。Vega 是指當(dāng)標(biāo)的資產(chǎn)波動(dòng)率發(fā)生變化時(shí),期權(quán)價(jià)值如何變化。將 vega 乘以標(biāo)的資產(chǎn)波動(dòng)率的±1%的變化,保持所有其他參數(shù)不變,將得到期權(quán)的新價(jià)值。 Vega 對(duì)多頭頭寸為正,對(duì)空頭頭寸為負(fù)。
Black-Scholes 方程中期權(quán)到期前時(shí)間的一階偏導(dǎo)數(shù)稱為θ。θ是指期權(quán)價(jià)值如何改變久而久之。一般按年計(jì)算,theta 指的是一個(gè)期權(quán)在一天過(guò)去后的價(jià)值變化。對(duì)于空頭頭寸,θ為正,對(duì)于多頭頭寸,θ為負(fù)。
Black-Scholes 方程關(guān)于無(wú)風(fēng)險(xiǎn)利率的一階偏導(dǎo)數(shù)稱為 rho。Rho 是指期權(quán)價(jià)值隨著利率的變化而如何變化。將ρ乘以利率的±1%的變化,保持所有其他參數(shù)不變,將得到期權(quán)的新價(jià)值。 Rho 對(duì)于多頭買(mǎi)入和空頭賣(mài)出頭寸為正,對(duì)于空頭買(mǎi)入和多頭賣(mài)出頭寸為負(fù)。
一位同事目前持有 1000 份 NVDA 看漲期權(quán)的空頭頭寸,她希望對(duì)沖波動(dòng)率、標(biāo)的資產(chǎn)的變動(dòng)以及標(biāo)的資產(chǎn)的變動(dòng)速度的風(fēng)險(xiǎn)。你在風(fēng)險(xiǎn)管理臺(tái)上,提議構(gòu)建一個(gè)動(dòng)態(tài)對(duì)沖,每天進(jìn)行再平衡(稍后會(huì)有更多)。我們?cè)鯓硬拍苤泻退龑?duì)織女星,德?tīng)査唾が數(shù)谋┞?#xff1f;
我們可以利用線性代數(shù)的第一周來(lái)幫助我們構(gòu)建一個(gè)解決方案。
首先要意識(shí)到的是,為了中和對(duì)希臘的風(fēng)險(xiǎn)敞口,我們需要在其他期權(quán)中建立抵消頭寸。有三個(gè)希臘人要中和,所以我們需要三個(gè)期權(quán)來(lái)創(chuàng)建三個(gè)希臘人和帶有三個(gè)未知數(shù)的權(quán)重(其他可交易期權(quán)中的權(quán)重)的方程。然而,這里的技巧是認(rèn)識(shí)到基礎(chǔ)資產(chǎn)對(duì)自身的偏導(dǎo)數(shù)只是 1,這意味著基礎(chǔ)資產(chǎn)的 delta 是 1,而所有其他希臘值都是 0。這意味著我們可以構(gòu)建兩個(gè)可交易期權(quán)的投資組合,找到適當(dāng)?shù)臋?quán)重來(lái)中和希臘人,然后在基礎(chǔ)資產(chǎn)中建立抵消頭寸——有效地中和對(duì)所有三個(gè)希臘人的敞口。
考慮以下模擬歐式看漲和看跌期權(quán)的代碼…
對(duì)于上述情況,請(qǐng)考慮以下條件…
- 短 1000 NVDA 來(lái)電 @ 545
- NVDA 價(jià)格 $543
- NVDA 隱含波動(dòng)率 53% (參見(jiàn)什么是隱含波動(dòng)率?)
- 期權(quán)到期前 1 個(gè)月
- 30 天倫敦銀行同業(yè)拆放利率 1.5%
使用這些輸入,我們可以找到我們同事的期權(quán)頭寸的理論價(jià)值…
這意味著我們的同事將因出售期權(quán)而獲得 32264.05 美元的溢價(jià)。
希臘人呢?為了找到我們的同事在希臘語(yǔ)中的位置,我們可以把它們打印出來(lái),然后乘以位置…
這意味著凈投資組合 delta、gamma 和 vega 是…
- 增量: -523.88
- 伽馬: -6.35
- 織女星: -815.54
現(xiàn)在讓我們考慮另外兩個(gè)可交易的看漲期權(quán),所有其他參數(shù)都相同,但兩個(gè)執(zhí)行價(jià)格分別是 550 和 555 …
調(diào)用選項(xiàng) A:
- 增量: 0.49991
- 伽瑪: 0.00605
- 織女星: 0.77823
調(diào)用選項(xiàng) B:
- 增量: 0.47616
- 伽瑪: 0.00577
- 織女星: 0.74126
基礎(chǔ)資產(chǎn)(NVDA 股票):
- △:1
- 伽瑪: 0
- 織女星: 0
使用這些資產(chǎn)的組合,我們可以中和我們的投資組合對(duì) delta、gamma 和 vega 的風(fēng)險(xiǎn)敞口。問(wèn)題是怎么做?答案:線性代數(shù)。
我們有興趣中和當(dāng)前投資組合中的希臘人可以表示為一個(gè)向量…
目標(biāo)是找到我們能夠交易的三種資產(chǎn)的權(quán)重,以抵消這些價(jià)值。首先,我們將設(shè)法壓制 gamma 和 vega,然后使用底層資產(chǎn)壓制 delta…
這意味著通過(guò)對(duì)包含可交易期權(quán)希臘價(jià)值的矩陣求逆,我們可以找到合適的權(quán)重…
我們可以使用 Python 來(lái)做到這一點(diǎn)…
注意:雖然我們?cè)谠歼x項(xiàng)中有一個(gè)短位置,但我們乘以一個(gè)正 1000,因?yàn)槲覀兿雽⒕仃嚪崔D(zhuǎn)為正伽瑪,織女星位置
我們已經(jīng)有效地找到了矩陣的逆矩陣,點(diǎn)積將是兩個(gè)可交易期權(quán)的最終權(quán)重…
利用這些重量,我們將有效地中和伽馬射線和織女星的輻射…
現(xiàn)在伽馬射線和織女星的輻射被中和了我們需要中和新的德?tīng)査妮椛?。為了找到我們的新敞?#xff0c;我們?nèi)∥覀兺顿Y組合中所有期權(quán)頭寸與其各自 deltas 的和積…
在我們的新期權(quán)頭寸乘以原始希臘頭寸后,我們發(fā)現(xiàn)我們的凈 delta 頭寸是-46。這意味著通過(guò)購(gòu)買(mǎi)基礎(chǔ)資產(chǎn)(NVDA)的 46 股,我們將擁有 delta、gamma 和 vega 中性投資組合。這意味著當(dāng)基礎(chǔ)資產(chǎn)價(jià)格、基礎(chǔ)資產(chǎn)波動(dòng)性或基礎(chǔ)資產(chǎn)價(jià)格變化速度發(fā)生變化時(shí),我們的期權(quán)組合的價(jià)值不會(huì)改變。這里列出的代碼可以直接在一個(gè)實(shí)時(shí)交易系統(tǒng)中實(shí)現(xiàn)(參見(jiàn)算法交易系統(tǒng)開(kāi)發(fā)或Python 算法交易)
- -1000 個(gè) NVDA 電話
- 8641 調(diào)用 A 選項(xiàng)
- -8006 調(diào)用 B 選項(xiàng)
- 46 股 NVDA 股票
看看我的其他文章,了解更多關(guān)于期權(quán)、理論定價(jià)和波動(dòng)交易的知識(shí)…
- 波動(dòng)交易 101
- 風(fēng)險(xiǎn)中性投資組合管理
- 推導(dǎo)布萊克-斯科爾斯模型
- 布萊克-斯科爾斯算法 Delta 套期保值
原文:https://towardsdatascience.com/algorithmic-trading-with-macd-and-python-fef3d013e9f3?source=collection_archive---------7-----------------------
Photo by 貝莉兒 DANIST on Unsplash
機(jī)器學(xué)習(xí)交易對(duì)于每天進(jìn)行數(shù)千筆交易的大型對(duì)沖基金來(lái)說(shuō)效果很好。然而,私人交易者只是沒(méi)有實(shí)時(shí)運(yùn)行具有數(shù)百萬(wàn)參數(shù)的機(jī)器學(xué)習(xí)模型的設(shè)施。這就是為什么私人算法交易者使用技術(shù)指標(biāo)進(jìn)行自動(dòng)交易。
我今天要用的技術(shù)指標(biāo)是 MACD,移動(dòng)平均線收斂發(fā)散,這是一個(gè)動(dòng)量指標(biāo),顯示了兩條移動(dòng)平均線之間的關(guān)系。MACD 的計(jì)算方法是從 12 期均線中減去 26 期均線。
這條 MACD 線畫(huà)在信號(hào)線上(9 周期均線)。這兩條線的交點(diǎn)就是 MACD 指標(biāo)的信號(hào)。如果 MACD 指標(biāo)從下方與信號(hào)線交叉,這將是上升趨勢(shì)。如果 MACD 指標(biāo)從信號(hào)線上方交叉,這將是一個(gè)下降趨勢(shì)。
為了在編程時(shí)有效率,為了心中有一個(gè)明確的目標(biāo),有必要?jiǎng)?chuàng)建一個(gè)關(guān)于程序應(yīng)該如何工作的總體想法。這個(gè)程序應(yīng)該能夠繪制 MACD 信號(hào)和 MACD 線,并根據(jù) MACD 指標(biāo)的信號(hào)進(jìn)行交易。一個(gè)好的程序還應(yīng)該能夠評(píng)估交易策略的盈利能力,從而對(duì)其進(jìn)行優(yōu)化。
這些是我將在程序中使用的庫(kù)。yfinance 用于下載股票的財(cái)務(wù)數(shù)據(jù),talib 用于計(jì)算 MACD 指標(biāo)的值。Matplotlib 用于繪制數(shù)據(jù),以更好地理解技術(shù)指標(biāo)。
這個(gè)腳本下載數(shù)據(jù),然后計(jì)算 macd 值,比如信號(hào)和定義趨勢(shì)的直方圖。
作者圖片
這是 MACD 指示器和信號(hào)線兩條線的圖形。這只是對(duì)程序進(jìn)行故障排除,以確保指示器正常工作。正如我們所看到的,該指標(biāo)顯然是有效的,因?yàn)閮蓷l線經(jīng)常相交。
交集函數(shù)使用一種非常規(guī)的方式來(lái)尋找交集:
- 如果列表 1 中的值大于列表 2 中相同索引的值,則存儲(chǔ) True。否則,存儲(chǔ) False。
- 將此函數(shù)應(yīng)用于大于 1 的索引。如果存儲(chǔ)的值不同,則一定發(fā)生了交集。
這是計(jì)算相交的唯一方法,因?yàn)橄嘟豢赡馨l(fā)生在真實(shí)點(diǎn)之間,使得不可能在兩個(gè)列表中找到相似的點(diǎn)。
我們使用這個(gè)函數(shù)來(lái)尋找交叉點(diǎn),并記下程序是賣(mài)還是買(mǎi)股票。
要做好一個(gè)股票交易程序,我們必須評(píng)估程序的盈利能力。
這個(gè)程序通過(guò)計(jì)算 true_trade 來(lái)計(jì)算盈利能力,true _ trade 存儲(chǔ)值是上升還是下降。如果交易符合真實(shí)交易變量,交易就是盈利的。如果交易不匹配,交易就會(huì)失敗。
運(yùn)行程序時(shí),利潤(rùn)為-288.26。什么?
我發(fā)現(xiàn)了這個(gè)錯(cuò)誤,并一直試圖擾亂耐心值,也就是交叉點(diǎn)形成后多久,交易就完成了。所有的值都是負(fù)數(shù)。當(dāng)面對(duì)這樣的問(wèn)題時(shí),其中值的極性都是錯(cuò)誤的,人們可以很容易地改變極性。
在這種情況下,這是因?yàn)榻患樞虿徽_!當(dāng)我們做交叉點(diǎn)時(shí),我們做了與我們描述的策略相反的洞察!例如,如果 MACD 線從上方相交,程序會(huì)將其標(biāo)記為價(jià)格上漲!這將使所有被認(rèn)為是有利可圖的交易變成虧損!
通過(guò)將交叉點(diǎn)代碼更改為:
我們獲得 298 美元的利潤(rùn)!
我寫(xiě)了另一篇關(guān)于 RSI 的文章,那個(gè)程序用同樣的數(shù)據(jù)只賺了 58 美元。這個(gè)項(xiàng)目賺了 298 美元,每筆交易買(mǎi)一股。這里有一些方法可以改進(jìn)我的程序:
- 調(diào)整耐心變量
這個(gè)變量是相交后多長(zhǎng)時(shí)間,將進(jìn)行交易。用這個(gè)值做玩具,找到一個(gè)模式,并優(yōu)化它以獲得更好的結(jié)果。
2.找到最好的份額
這個(gè)算法對(duì)哪只股票最有效?在不同的公司上測(cè)試這個(gè)程序以進(jìn)行評(píng)估。
如果你想看更多我的內(nèi)容,點(diǎn)擊這個(gè) 鏈接 。
原文:https://towardsdatascience.com/algorithmic-trading-with-python-8fbf1c279e77?source=collection_archive---------12-----------------------
照片致謝
Python 已經(jīng)迅速成為數(shù)據(jù)科學(xué)、機(jī)器學(xué)習(xí)和人工智能領(lǐng)域最強(qiáng)大的計(jì)算語(yǔ)言之一。在用 Java 寫(xiě)了一本關(guān)于算法交易系統(tǒng)開(kāi)發(fā)的指南之后,我覺(jué)得是時(shí)候?yàn)?Python 寫(xiě)一本了;尤其是考慮到 Interactive Broker 新支持的 Python API。本文是一個(gè) API 指南,通過(guò)定期參考我自己的實(shí)現(xiàn)和官方文檔,幫助您入門(mén)和運(yùn)行。
假設(shè)您已經(jīng)正確安裝了 Python 并建立了適當(dāng)?shù)沫h(huán)境變量,要安裝交互式代理的 Python API,您可以在命令行中調(diào)用 pip 包管理器。
這將把 ibapi 包安裝到 Python 的默認(rèn)版本中。如果你有多個(gè)版本的 Python(甚至可能是 Python2),你可能想安裝 Python3 的包。
需要特別注意的是,如果您成功安裝了軟件包,但仍然出現(xiàn) ModuleNotFound 錯(cuò)誤,那么您很可能是在使用安裝了 API 的不同 Python 版本運(yùn)行 Python 腳本。如果你想下載源代碼,或者看看 Java、C++和其他語(yǔ)言的 API 實(shí)現(xiàn),你可以在這里下載:【https://www.interactivebrokers.com/en/index.php?f=5041。
接下來(lái),我們需要一個(gè)網(wǎng)關(guān)來(lái)發(fā)出請(qǐng)求和接收來(lái)自交互代理的數(shù)據(jù),我稱之為服務(wù)器。從上面的鏈接(頁(yè)面底部)下載 IB 網(wǎng)關(guān),當(dāng)你登錄時(shí),你會(huì)看到一個(gè)類似這樣的界面…
導(dǎo)航到配置→設(shè)置→ API →設(shè)置,您可以配置您的 API 設(shè)置(主機(jī)、端口、只讀等)。
在成功安裝了交互式代理的 Python API 之后,就到了實(shí)現(xiàn)的時(shí)候了。直觀上,這個(gè) API 可以分為兩個(gè)通信通道,一個(gè)從服務(wù)器讀取,另一個(gè)向服務(wù)器寫(xiě)入…
EClient 類負(fù)責(zé)向服務(wù)器發(fā)送請(qǐng)求。這些請(qǐng)求被保存在一個(gè)隊(duì)列中,直到這個(gè)隊(duì)列被 run() 函數(shù)清除。該類將 EWrapper 作為參數(shù),因?yàn)樵?EWrapper 的實(shí)例是服務(wù)器用回調(diào)進(jìn)行響應(yīng)的地方。
EWrapper 類負(fù)責(zé)在回調(diào)函數(shù)中接收數(shù)據(jù)。
要構(gòu)建一個(gè)算法交易系統(tǒng),多個(gè)進(jìn)程必須同時(shí)發(fā)生,這就是為什么我們必須將 EClient 持久化在它自己的線程上,這樣讀寫(xiě)就可以異步發(fā)生。如果你想了解更多關(guān)于多線程的知識(shí),我寫(xiě)了一個(gè)快速入門(mén)指南,介紹如何用 Python 為金融開(kāi)發(fā)多線程。
要?jiǎng)?chuàng)建讀寫(xiě)服務(wù)器的能力,需要?jiǎng)?chuàng)建 EClient 和 EWrapper 的兩個(gè)子類。我將把 EWrapper 子類聲明為 APIController,把 EClient 聲明為 APISocket。主類將成為這兩個(gè)實(shí)現(xiàn)的子類。
讓我們分析一下這是怎么回事。正如我之前所說(shuō),EClient 類負(fù)責(zé)向服務(wù)器發(fā)出請(qǐng)求,而服務(wù)器則響應(yīng) EWrapper 類。通過(guò)創(chuàng)建 APISocket 和 APIController 子類,我們可以覆蓋超類函數(shù)并編寫(xiě)自定義實(shí)現(xiàn)。在這個(gè)例子中,您可以看到 APIController 有兩個(gè)回調(diào),一個(gè)用于錯(cuò)誤,一個(gè)用于連接。服務(wù)器只會(huì)調(diào)用@iswrapper 函數(shù)來(lái)響應(yīng)對(duì)服務(wù)器的請(qǐng)求。為了在 main 類中發(fā)出連接請(qǐng)求,我們引用 self(API socket)并用 host、port 和 clientId 參數(shù)調(diào)用 connect。這將請(qǐng)求放在 EClient 隊(duì)列中,但是正如我所說(shuō)的,要構(gòu)建一個(gè)算法系統(tǒng),必須有并發(fā)讀寫(xiě)的能力,所以我們將支持在請(qǐng)求隊(duì)列自己的線程上清除請(qǐng)求隊(duì)列(通過(guò)發(fā)出請(qǐng)求)。在運(yùn)行 TradingApp 類的一個(gè)實(shí)例后,您將得到一個(gè)成功連接到服務(wù)器的消息,這個(gè)連接在 EClient 線程的生命周期中是持久的。
成功建立連接后,您將可以通過(guò)各種請(qǐng)求的形式訪問(wèn)來(lái)自服務(wù)器的所有類型的數(shù)據(jù),在他們的文檔中可以找到請(qǐng)求的完整列表。
如果你對(duì)實(shí)時(shí)市場(chǎng)數(shù)據(jù)感興趣,你需要購(gòu)買(mǎi)一份市場(chǎng)數(shù)據(jù)訂閱服務(wù),最低賬戶金額為 2000 美元。
合約是告訴服務(wù)器我們對(duì)什么工具感興趣的交易/流/分析的類。輸入?yún)?shù)非常簡(jiǎn)單,只引用感興趣的特定證券。我一直在交易 E-mini NASDAQ-100,并將在這個(gè)例子中使用它。
要請(qǐng)求數(shù)據(jù)流,只需將請(qǐng)求放在連接請(qǐng)求下。
要從服務(wù)器接收數(shù)據(jù),請(qǐng)向 APIController 添加 tickPrice 和 tickSize 回調(diào)函數(shù)。
對(duì)實(shí)時(shí)數(shù)據(jù)流執(zhí)行分析相對(duì)簡(jiǎn)單,因?yàn)閿?shù)據(jù)可以間隔存儲(chǔ)在數(shù)據(jù)緩存中,也可以內(nèi)部存儲(chǔ)在 APIController 中。然而,從回調(diào)函數(shù)發(fā)出服務(wù)器請(qǐng)求有點(diǎn)復(fù)雜,我想提供一個(gè)創(chuàng)造性的解決方案。
用 EClient 和 Contract 參數(shù)創(chuàng)建一個(gè)名為 signal 的新類(我用它在回調(diào)函數(shù)中下訂單,但其他請(qǐng)求也可以),允許主類作為 EClient 作為 Signal 類的參數(shù)。那么這個(gè) signal 類就是 APIController 的一個(gè)新參數(shù),這樣控制器就可以直接引用 self.signal.FUNCTION_IN_signal 或者 self . SIGNAL . e client . server _ REQUEST,分別在 SIGNAL 類或者 direct requests 中進(jìn)行定制請(qǐng)求實(shí)現(xiàn)。
我制作了一個(gè)視頻指南,進(jìn)一步分解了交互式經(jīng)紀(jì)人 API。
原文:https://towardsdatascience.com/algorithmic-trading-with-rsi-using-python-f9823e550fe0?source=collection_archive---------4-----------------------
美國(guó)宇航局在 Unsplash 拍攝的照片
機(jī)器學(xué)習(xí)是計(jì)算密集型的,因?yàn)樗惴ㄊ遣淮_定的,因此必須隨著時(shí)間的推移不斷調(diào)整。然而,技術(shù)指標(biāo)要快得多,因?yàn)榈仁讲粫?huì)改變。因此,這提高了它們用于實(shí)時(shí)交易的能力。
這里是 github 回購(gòu)(廣告)。
要?jiǎng)?chuàng)建一個(gè)使用 RSI 的程序,首先要了解 RSI 指標(biāo)。RSI 是相對(duì)強(qiáng)度指數(shù)的縮寫(xiě)。它是一個(gè)動(dòng)量指標(biāo),使用價(jià)格變化的幅度來(lái)評(píng)估證券是超買(mǎi)還是超賣(mài)。
如果 RSI 值超過(guò) 70,則認(rèn)為該證券超買(mǎi),如果低于 30,則認(rèn)為超賣(mài)。超買(mǎi)是指由購(gòu)買(mǎi)產(chǎn)生的泡沫可能很快破裂,因此價(jià)格會(huì)下跌。這創(chuàng)造了一個(gè)強(qiáng)有力的切入點(diǎn)。
然而,好的做法是,只有當(dāng) RSI 值與超買(mǎi)線相交時(shí),才賣(mài)出訂單,因?yàn)檫@是一種更保守的方法。至少可以猜測(cè) RSI 何時(shí)會(huì)達(dá)到最高點(diǎn)。
這個(gè)程序試圖使用 talib(技術(shù)分析)庫(kù)來(lái)實(shí)現(xiàn) RSI 線和超賣(mài)超買(mǎi)線的交叉。該程序的大部分不是來(lái)自于對(duì)指標(biāo)的編程(因?yàn)樗呀?jīng)在庫(kù)中創(chuàng)建了),而是如何使用超賣(mài)和超買(mǎi)區(qū)域進(jìn)行交易的實(shí)現(xiàn)。
這些是該計(jì)劃的先決條件。Yfinance 用于下載股票數(shù)據(jù),talib 用于計(jì)算指標(biāo)值。Matplotlib 當(dāng)然是將數(shù)據(jù)繪制成圖形。
該腳本訪問(wèn)數(shù)據(jù),并根據(jù)以下兩個(gè)等式計(jì)算 rsi 值:
RSI step 1= 100[100/(1+平均損耗/平均增益)]
RSI step 2= 100[100/(1+平均平均損耗÷13+當(dāng)前損耗/先前平均增益÷13+當(dāng)前增益)]
該圖顯示了所有的超買(mǎi)和超賣(mài)區(qū)域,以及為股票收盤(pán)價(jià)計(jì)算的 RSI 值。這給了股票數(shù)據(jù)一個(gè)很好的可視化
作者圖片
這是合成圖。隨著時(shí)間的推移,我們可以看到 RSI 值在不同部分之間波動(dòng)。RSI 的好處在于它是相對(duì)的。這意味著信號(hào)的強(qiáng)度與實(shí)際值無(wú)關(guān),而是與過(guò)去值的關(guān)系有關(guān)。
通常,文章到此為止。他們?cè)诮o出股票交易程序的初步代碼后結(jié)束。有必要更進(jìn)一步,真正評(píng)估股票交易程序,基于程序的盈利能力。這就是為什么我要交程序。
這個(gè)腳本記錄了每個(gè)點(diǎn)所在的部分。它要么在超買(mǎi),超賣(mài)或無(wú)區(qū)域,這是指在兩條線之間。
這個(gè)腳本整合了 RSI 交易的基本策略。交易策略是當(dāng)價(jià)值離開(kāi)超買(mǎi)和超賣(mài)部分時(shí),進(jìn)行適當(dāng)?shù)慕灰?。例?#xff0c;如果它離開(kāi)超賣(mài)區(qū),就進(jìn)行買(mǎi)入交易。如果它離開(kāi)了超買(mǎi)區(qū),就進(jìn)行賣(mài)出交易。
這個(gè)腳本使用程序進(jìn)行的交易來(lái)計(jì)算每筆交易的利潤(rùn)或損失。這給出了程序的最佳評(píng)價(jià),因?yàn)樗鼫?zhǔn)確地鎖定了要尋找的變量。qty 變量計(jì)算購(gòu)買(mǎi)了多少股票。
運(yùn)行程序后,計(jì)算的利潤(rùn)為:
事實(shí)上,當(dāng)考慮到風(fēng)險(xiǎn)回報(bào)比時(shí),58.3 美元的利潤(rùn)實(shí)際上不是一個(gè)很好的投資。有很多方法可以改進(jìn)我的程序:
- 調(diào)整耐心變量
這個(gè)變量是在 RSI 值之后多久,將進(jìn)行交易。用這個(gè)值做玩具,找到一個(gè)模式,并優(yōu)化它以獲得更好的結(jié)果。
2.找到最好的公司
這個(gè)算法對(duì)哪只股票最有效?在不同的公司上測(cè)試這個(gè)程序以進(jìn)行評(píng)估。
如果你想看更多我的內(nèi)容,點(diǎn)擊這個(gè) 鏈接 。