Creating beautiful maps with Python -번역

Python으로 아름다운지도 만들기

Python + OSMnx

Berlin map — Image by the author

저는 항상 도시지도를 좋아했고 몇 주 전에 나만의 예술적 버전을 만들기로 결정했습니다.인터넷 검색을 한 후이 놀라운 사실을 발견했습니다.지도 시간작성자프랭크 세발 로스.매혹적이고 편리한 튜토리얼이지만 더 자세하고 사실적인 청사진 맵을 선호합니다.그래서 나만의 버전을 만들기로 결정했습니다.이제 작은 파이썬 코드와 OpenStreetMap 데이터로 아름다운지도를 만드는 방법을 살펴 보겠습니다.

OSMnx 설치

우선, 우리는 Python 설치가 있습니다.나는 사용하는 것이 좋습니다콘다깔끔한 작업 공간을 확보하기위한 가상 환경 (venv).또한 OpenStreetMap에서 공간 데이터를 다운로드 할 수있는 OSMnx Python 패키지를 사용할 것입니다.Venv를 만들고 두 개의 Conda 명령을 작성하기 만하면 OSMnx를 설치할 수 있습니다.

conda 구성-채널 앞에 추가 conda-forge
conda create -n ox --strict-channel-priority osmnx

Downloading street networks

OSMnx를 성공적으로 설치 한 후 코딩을 시작할 수 있습니다.가장 먼저해야 할 일은 데이터를 다운로드하는 것입니다.데이터 다운로드는 다양한 방법으로 수행 할 수 있습니다. 가장 쉬운 방법 중 하나는graph_from_place ().

베를린 거리 네트워크 다운로드

graph_from_place ()여러 매개 변수가 있습니다.장소 OpenStreetMaps에서 데이터를 검색하는 데 사용할 쿼리입니다.보유 _ 모두다른 요소와 연결되어 있지 않더라도 우리에게 모든 거리를 줄 것입니다.단순화반환 된 그래프를 약간 정리하고network_type 얻을 거리 네트워크의 유형을 지정하십시오.

나는 검색을 찾고있다모두가능한 데이터를 사용하지만 드라이브 도로 만 다운로드 할 수도 있습니다.드라이브, 또는산책.

또 다른 가능성은graph_from_point () GPS 좌표를 지정할 수 있습니다.이 옵션은 일반적인 이름을 가진 장소와 같은 여러 경우에 더 편리하며 더 정확합니다.사용dist 그래프 중심의이 수 미터 내에있는 노드 만 유지할 수 있습니다.

마드리드 거리 네트워크 다운로드

또한 마드리드 나 베를린과 같은 더 큰 장소에서 데이터를 다운로드하는 경우 모든 정보를 검색하기 위해 조금 기다려야한다는 점을 고려해야합니다.

데이터 압축 풀기 및 채색

양자 모두graph_from_place ()graph_from_point ()다음과 같이 목록에 압축을 풀고 저장할 수있는 MultiDiGraph를 반환합니다.Frank Ceballos 튜토리얼.

이 지점에 도달하면 데이터를 반복하고 색상을 지정하기 만하면됩니다.색상을 지정하고 조정할 수 있습니다.선폭거리 기지길이.

그러나 특정 도로를 식별하고 다르게 색상을 지정할 수도 있습니다.

내 예에서는 다음 색상으로 만 colourMap.py Gist를 사용하고 있습니다.

색상 =“# a6a6a6”

색상 =“# 676767”

색상 =“# 454545”

색상 =“#bdbdbd”

색상 =“# d5d5d5”

색상 =“#ffff”

그러나 취향에 맞는 새로운지도를 만들기 위해 색상이나 조건을 자유롭게 변경하십시오.

지도 플로팅 및 저장

마지막으로,지도를 그리는 데 남은 한 가지만 있으면됩니다.먼저지도의 중심을 식별해야합니다.중심이 될 GPS 좌표를 선택하십시오.그런 다음 테두리와 배경색을 추가하고bgcolor.북쪽,남쪽,동쪽서쪽서쪽은 우리지도의 새로운 경계가 될 것입니다.이 좌표는 이러한 경계에서 이미지 기반을 자르고 더 큰지도를 원할 때 경계를 늘리면됩니다.다음을 사용하는 경우graph_from_point ()방법을 늘릴 필요가 있습니다dist당신의 필요에 따라 가치 기반.에 대한bgcolor청사진을 시뮬레이션하기 위해 파란색에서 진한 파란색 # 061529를 선택했지만 원하는대로 조정할 수 있습니다.

그런 다음지도를 플로팅하고 저장하기 만하면됩니다.나는 사용을 추천한다fig.tight_layout (pad = 0)서브 플롯이 잘 맞도록 플롯 매개 변수를 조정합니다.

결과

이 코드를 사용하여 다음 예제를 작성할 수 있지만 각 도시의 선 너비 또는 경계 제한과 같은 설정을 실행하는 것이 좋습니다.

마드리드 도시지도 — 포스터 크기

고려해야 할 한 가지 차이점graph_from_place ()graph_from_point ()그것은graph_from_point ()주변에서 거리 데이터를 얻습니다.dist설정합니다.간단한지도를 원하는지 더 자세한지도를 원하는지에 따라 서로 교환 할 수 있습니다.마드리드 도시지도는graph_from_place ()베를린 도시지도는graph_from_point ().

베를린 시티지도

그 위에 포스터 크기 이미지를 원할 수도 있습니다.이를 달성하는 한 가지 쉬운 방법은무화과내부 속성ox.plot_graph ().무화과너비, 높이를 인치 단위로 조정할 수 있습니다.나는 보통 같은 더 큰 크기를 선택했습니다figsize = (27,40).

보너스 : 물 추가

OpenStreetMap에는 강 및 호수 또는 수로와 같은 기타 천연 수원의 데이터도 있습니다.다시 OSmnx를 사용하여이 데이터를 다운로드 할 수 있습니다.

천연 수원 다운로드

이전과 같은 방식으로이 데이터를 반복하고 색상을 지정할 수 있습니다.이 경우 # 72b1b1 또는 # 5dc1b9와 같은 파란색을 선호합니다.

마지막으로 그림을 저장하면됩니다.이 경우에는 테두리를 사용하지 않습니다.bbox내부plot_graph.그것은 당신이 놀 수있는 또 다른 것입니다.

강을 성공적으로 다운로드 한 후 두 이미지를 결합하면됩니다.약간의 Gimp 또는 Photoshop이 트릭을 수행 할 것입니다. 동일한 두 이미지를 만들어야합니다.fig_size또는 경계 제한,bbox,보다 쉬운 보간을 위해.

베를린 천연 수원

마무리

내가 추가하고 싶은 것은 도시 이름, GPS 좌표 및 국가 이름이 포함 된 텍스트입니다.한 번 더 Gimp 또는 Photoshop이 트릭을 수행합니다.

또한 물을 추가하면 일부 공간을 채우거나 바닷물과 같은 다른 수원을 칠해야합니다.강의 선은 일정하지 않지만 페인트 통 도구를 사용하여 이러한 간격을 채울 수 있습니다.

코드 및 결론

이러한지도를 만드는 코드는 내GitHub.자유롭게 사용 하시고 결과를 보여주세요 !!이 게시물을 좋아하고 다시 감사드립니다.프랭크 세발 로스및 Medium 커뮤니티.또한 포스터를 인쇄하고 싶다면 작은 가게를 열었습니다.Etsy내지도 제작과 함께.

저를 읽어 주셔서 감사하고 지식을 공유하면 더 좋고 놀라운 결과를 얻을 수 있습니다 !!

Value-based Methods in Deep Reinforcement Learning -번역

심층 강화 학습의 가치 기반 방법

심층 강화 학습은 지난 몇 년 동안 떠오르는 분야였습니다.시작하기에 좋은 접근 방식은 상태 (또는 상태-작업) 값을 학습하는 값 기반 방법입니다.이 게시물에서는 Q-learning 및 확장에 중점을 둔 포괄적 인 리뷰가 제공됩니다.

unsplash

A Short Introduction to Reinforcement Learning (RL)

일반적인 기계 학습 접근 방식에는 세 가지 유형이 있습니다. 1) 학습 시스템이 레이블이 지정된 예를 기반으로 잠재 맵을 학습하는지도 학습, 2) 학습 시스템이 레이블이없는 예를 기반으로 데이터 배포를위한 모델을 설정하는 비지도 학습, 3) 강화 학습, 여기서의사 결정 시스템은 최적의 결정을 내릴 수 있도록 훈련됩니다.디자이너의 관점에서 모든 종류의 학습은 손실 함수에 의해 감독됩니다.감독의 출처는 인간에 의해 정의되어야합니다.이를 수행하는 한 가지 방법은 손실 함수입니다.

작성자의 이미지

감독 중학습, 지상 실측 레이블이 제공됩니다.그러나 RL에서는 환경을 탐색하여 에이전트를 가르칩니다.에이전트가 과제를 해결하려는 세상을 디자인해야합니다.이 디자인은 RL과 관련이 있습니다.공식 RL 프레임 워크 정의는 [1]에 의해 제공됩니다.

an에이전트에서 연기환경.모든 시점에서 에이전트는상태환경을 결정하고동작상태를 변경합니다.이러한 각 작업에 대해 에이전트는보상신호.에이전트의 역할은받은 총 보상을 극대화하는 것입니다.

RL 다이어그램 (저자 이미지)

그래서 어떻게 작동합니까?

RL은 시행 착오를 통해 순차적 인 의사 결정 문제를 해결하는 방법을 배우기위한 프레임 워크입니다.가끔 보상을 제공하는 세계의 오류.이것은 어떤 목표를 달성하기 위해 불확실한 환경에서 수행 할 일련의 작업을 경험을 통해 결정하는 작업입니다.행동 심리학에서 영감을받은 강화 학습 (RL)은이 문제에 대한 공식적인 틀을 제안합니다.인공 에이전트는 환경과 상호 작용하여 학습 할 수 있습니다.수집 된 경험을 사용하여 인공 에이전트는 누적 보상을 통해 주어진 일부 목표를 최적화 할 수 있습니다.이 접근법은 원칙적으로 과거 경험에 의존하는 모든 유형의 순차적 의사 결정 문제에 적용됩니다.환경은 확률적일 수 있으며 에이전트는 현재 상태에 대한 일부 정보 만 관찰 할 수 있습니다.

왜 깊이 들어가야합니까?

지난 몇 년 동안 RL은 도전적인 순차적 의사 결정 문제를 성공적으로 해결함으로써 점점 인기를 얻었습니다.이러한 성과 중 일부는 RL과 딥 러닝 기술의 조합 때문입니다.예를 들어 딥 RL 에이전트는 수천 개의 픽셀로 구성된 시각적 지각 입력으로부터 성공적으로 학습 할 수 있습니다 (Mnih et al., 2015/2013).

같이렉스 프리드먼말했다 :

“AI에서 가장 흥미로운 분야 중 하나입니다.그것은 세계를 표현하고 이해하기 위해 심층 신경망의 힘과 능력을 합쳐서 세상을 행동하고 이해하는 능력과 결합하는 것입니다.”

이전에는 기계에 도달 할 수 없었던 광범위한 복잡한 의사 결정 작업을 해결했습니다.Deep RL은 의료, 로봇 공학, 스마트 그리드, 금융 등에서 많은 새로운 애플리케이션을 엽니 다.

RL의 유형

가치 기반: 상태 또는 상태-작업 값을 학습합니다.주에서 가장 좋은 행동을 선택하여 행동하십시오.탐험이 필요합니다.정책 기반: 상태를 행동으로 매핑하는 확률 적 정책 함수를 직접 학습합니다.샘플링 정책에 따라 행동하십시오.모델 기반: 세계의 모델을 배우고 모델을 사용하여 계획합니다.모델을 자주 업데이트하고 다시 계획하십시오.

수학적 배경

이제 우리는 “모델없는”접근 방식에 속하는 가치 기반 방법에 초점을 맞추고,보다 구체적으로 Q- 학습에 속하는 DQN 방법에 대해 논의 할 것입니다.이를 위해 필요한 수학적 배경을 빠르게 검토합니다.

오픈 AI

몇 가지 수학적 수량을 정의 해 보겠습니다.

  1. 기대 수익

RL 에이전트의 목표는 예상 수익을 최적화하는 정책을 찾는 것입니다 (V- 값 함수).

어디이자형 기대 값 연산자, 감마는 할인 계수,파이이다 정책.그만큼최적의 기대 수익다음과 같이 정의됩니다.

최적의 V- 값 함수는 주어진 상태에서 예상되는 할인 된 보상입니다. 에스 에이전트는 정책을 따릅니다. 파이 *그후에.

2.Q 값

관심있는 더 많은 기능이 있습니다.그중 하나는 품질 가치 기능입니다.

V- 기능과 유사하게 최적의값은 다음과 같이 지정됩니다.

최적-value는 주어진 상태에있을 때 그리고 주어진 행동에 대해 예상되는 할인 된 수익입니다.ㅏ, 에이전트는 정책을 따릅니다.파이 *그후에.최적의 정책은이 최적 값에서 직접 얻을 수 있습니다.

삼.장점 기능

마지막 두 기능을 연관시킬 수 있습니다.

행동이 얼마나 좋은지 설명합니다. 직접 정책을 따를 때 예상 수익과 비교됩니다.파이.

4.Bellman 방정식

배우려면값, Bellman 방정식이 사용됩니다.독특한 솔루션을 약속합니다큐*:

어디Bellman 연산자입니다.

최적의 가치를 약속하기 위해 : 상태-액션 쌍은 개별적으로 표현되고 모든 액션은 모든 상태에서 반복적으로 샘플링됩니다.

Q- 학습

정책을 벗어난 방법의 Q 학습은 주에서 행동을 취하고 학습하는 것의 가치를 배웁니다.가치와 세상에서 행동하는 방법을 선택합니다.상태-액션 값 함수를 정의합니다.에스,실행할 수 있는, 및 팔로우파이.표 형식으로 표시됩니다.에 따르면에이전트는 모든 정책을 사용하여미래의 보상을 극대화합니다.직접 근사치큐*, 에이전트가 각 상태-작업 쌍을 계속 업데이트 할 때.

딥 러닝이 아닌 접근 방식의 경우이 Q 함수는 표일뿐입니다.

작성자의 이미지

이 표에서 각 요소는 보상 값이며, 훈련 중에 업데이트되어 정상 상태에서 할인 계수로 보상의 예상 값에 도달해야합니다.큐*값.실제 시나리오에서 가치 반복은 비현실적입니다.

Google의 이미지

에서브레이크 아웃 게임,상태는 화면 픽셀입니다. 이미지 크기 : 84×84, 연속 : 4 개 이미지, 회색 수준 : 256. 따라서-테이블은 :

언급하자면, 우주에는 10⁸² 원자가 있습니다.이것이 우리가 다음과 같은 문제를 해결해야하는 좋은 이유입니다.브레이크 아웃 게임심층 강화 학습에서…

DQN : Deep Q-Networks

우리는 신경망을 사용하여함수:

신경망은 함수 근사로 유용합니다.DQN은 Atari 게임에서 사용되었습니다.손실 함수에는 두 가지 Qs 함수가 있습니다.

표적: 특정 상태에서 행동을 취할 때 예상되는 Q 값.예측: 실제로 그 행동을 취할 때 얻는 가치 (다음 단계에서 가치를 계산하고 총 손실을 최소화하는 것을 선택).

매개 변수 업데이트 :

가중치를 업데이트 할 때 대상도 변경됩니다.신경망의 일반화 / 외삽으로 인해 상태-행동 공간에 큰 오류가 발생합니다.따라서 Bellman 방정식은 w.p.1.이 업데이트 규칙으로 오류가 전파 될 수 있습니다 (느림 / 불안정 등).

DQN 알고리즘은 다양한 ATARI 게임에 대한 온라인 설정에서 강력한 성능을 얻을 수 있으며픽셀.불안정성을 제한하는 두 가지 경험적 방법 : 1. 대상의 매개 변수-network는 N 반복마다 업데이트됩니다.이렇게하면 불안정성이 빠르게 전파되는 것을 방지하고 분산 위험을 최소화합니다.경험 리플레이 메모리 트릭을 사용할 수 있습니다.

DQN 아키텍처 (MDPI : 경제학에서 심층 강화 학습 방법 및 응용 프로그램에 대한 포괄적 인 검토)

DQN 트릭 : 리플레이와 엡실론 탐욕스러운 경험

리플레이 체험

DQN에서는 CNN 아키텍처가 사용됩니다.비선형 함수를 사용한 Q- 값의 근사값은 안정적이지 않습니다.경험 리플레이 트릭에 따르면 모든 경험은 리플레이 메모리에 저장됩니다.네트워크를 훈련 할 때 가장 최근의 작업 대신 재생 메모리의 임의 샘플이 사용됩니다.즉, 에이전트는 기억 / 저장 경험 (상태 전환, 행동 및 보상)을 수집하고 훈련을위한 미니 배치를 만듭니다.

엡실론 탐욕 탐사

기능 수렴큐*, 실제로 발견 한 첫 번째 효과적인 전략으로 해결됩니다.따라서 탐사는 탐욕 스럽습니다.탐색하는 효과적인 방법은 확률이 “엡실론”이고 그렇지 않은 경우 (1- 엡실론), 탐욕스러운 행동 (가장 높은 Q 값)을 가진 무작위 행동을 선택하는 것입니다.경험은 엡실론 탐욕 정책에 의해 수집됩니다.

DDQN : Double Deep Q-Networks

의 최대 연산자-학습은 행동을 선택하고 평가하기 위해 동일한 값을 사용합니다.이는 과대 평가 된 값 (노이즈 또는 부정확 한 경우)을 선택하여 과도하게 낙관적 인 값을 추정하게 만듭니다.DDQN에는 각각 별도의 네트워크가 있습니다.큐.따라서 두 개의 신경망이 있습니다.현재 가중치로 얻은 값에 따라 정책이 여전히 선택되는 편향을 줄이는 데 도움이됩니다.

견인 신경망,각 기능 :

이제 손실 함수는 다음과 같이 제공됩니다.

Deep Q-Networks 결투

포함이점() 값 (V) 그 상태에 있습니다.조치를 취하는 이점으로 일찍 정의에스다른 모든 가능한 작업 및 상태 중에서.당신이 취하고 자하는 모든 행동이“아주 좋은”것이라면, 우리는 그것이 얼마나 더 나은지 알고 싶습니다.

결투 네트워크는 두 개의 개별 추정치를 나타냅니다. 하나는 상태 값 함수를위한 것이고 다른 하나는 상태 의존적 행동 이점 함수를위한 것입니다.코드 예제를 더 읽으려면듀얼 딥 큐 네트워크게시크리스 윤.

요약

우리는 강화 학습에 대한 일반적인 소개와이를 딥 러닝 맥락에 넣을 동기 부여와 함께 가치 기반 방법의 Q- 러닝을 제시했습니다.수학적 배경, DQN, DDQN, 몇 가지 트릭 및 결투 DQN이 탐구되었습니다.

저자 정보

Barak Or는 B.Sc.(2016), M.Sc.(2018) 항공 우주 공학 학위 및 B.A.Technion, Israel Institute of Technology에서 경제 및 경영학 박사 (2016, Cum Laude).그는 Qualcomm (2019–2020)에서 주로 기계 학습 및 신호 처리 알고리즘을 다루었습니다.Barak은 현재 그의 Ph.D.하이파 대학교에서.그의 연구 관심 분야는 센서 융합, 내비게이션, 기계 학습 및 추정 이론입니다.

www.Barakor.com|https://www.linkedin.com/in/barakor/

References

[1] Sutton, Richard S. 및 Andrew G. Barto.강화 학습 : 소개.MIT Press, 2018 년.

[2] 심층 강화 학습을 통한 인간 수준 제어, Volodymyr Mnih et al., 2015. on Nature.

Mosavi, Amirhosein, et al.”심층 강화 학습 방법 및 경제학 적용에 대한 종합적인 검토.”수학8.10 (2020) : 1640.

[4] 베어드, 리몬.”잔류 알고리즘 : 함수 근사를 통한 강화 학습.”기계 학습 절차 1995.Morgan Kaufmann, 1995. 30–37.

Helping late borrowers repay with uplift modeling at Tala -번역

Tala의 Uplift Modeling으로 늦은 차용자가 상환하도록 지원

Tala의 데이터 과학 팀이 개선 모델링을 통해 대출자 경험과 비즈니스 KPI를 개선 한 방법

Image from Tala

이 게시물은실제 사례를 통해 향상 모델링의 메커니즘에 대한 심층 분석.여기에서는 데이터 과학 팀의탈라기한이 지난 차용인이 대출금을 상환 할 수 있도록 업 리프트 모델링을 적용했습니다.Tala는 세계에서 가장 접근하기 쉬운 소비자 신용 상품을 제공하며, 스마트 폰 앱을 통해 공식적인 신용 기록이없는 사람들에게 대출을 즉시 인수하고 지불합니다.

소개

그 기계는 여러 가지 방법 중 학습은 비즈니스를위한 가치를 창출 할 수 있으며 개선 모델링은 덜 알려진 것 중 하나입니다.그러나 많은 사용 사례에서 가장 효과적인 모델링 기술 일 수 있습니다.비즈니스가 다른 고객을 위해 선택적으로 취할 수있는 비용이 많이 드는 조치가있는 모든 상황에서 고객의 행동에 영향을 미치기 위해 업 리프트 모델링은 해당 조치의 영향을 가장 많이받는 고객 하위 집합을 찾는 강력한 후보가되어야합니다.이는 비즈니스 전략에 대한 투자 수익을 극대화하는 데 중요합니다.

이 게시물에서는 Tala에서 업 리프트 모델링으로 다룬 비즈니스 문제, 업 리프트 모델의 기본 사항 및 모델 구축 방법, 업 리프트 모델의 예측을 설명 할 수있는 방법, 업 리프트 개념을 확장하여 직접 제공하는 방법에 대해 설명합니다.재정적 통찰력 및 생산에서 상승 모델의 성능을 모니터링하기위한 고려 사항.

Tala의 사용 사례 : 연체 대출자

차용인이 대출 만기일을 지나면 자신의 재정 건전성과 대출 한 사업의 건전성을 위험에 빠뜨립니다.기한이 지난 대출자에게 연락하여 대출금을 상환하도록 장려하는 Tala의 기본 수단 중 하나는 전화를 이용하는 것입니다.그러나 이것은 비용이 많이 드는 프로세스이며 전화 통화가 가져올 것으로 예상되는 수익 증가와 균형을 이루어야합니다. 차용인이 전화를 걸면 대금을 지불 할 가능성이 얼마나됩니까?

수학적으로 우리는 차용인에게 전화를함으로써 지불 가능성이 높아지는 것에 관심이 있습니다.이것은 차용인이 전화를 받았을 때와 전화를받지 않았을 때의 지불 확률의 차이로 정의됩니다.

작성자의 이미지

업 리프트 모델링의 전제는 전화가 주어지면 상환 가능성이 가장 큰 차용자를 식별하는 데 도움이 될 수 있다는 것입니다.즉, 더 설득력있는 사람.이러한 차용자를 식별 할 수 있다면 차용자와 Tala의 재정 건전성을 극대화하기 위해 리소스의 우선 순위를보다 효과적으로 지정할 수 있습니다.

기회에 집중

이제 개선 모델링의 목표를 알았으니 어떻게 거기에 도달 할 수 있을까요?향상 모델링은 무작위로 통제 된 실험에 의존합니다. 우리는 전화를받은 치료 그룹과 전화를받지 않은 통제 그룹 모두에있는 모든 다른 종류의 대출자의 대표 표본이 필요합니다.

이미지 출처탈라

이 데이터 세트를 얻은 후, 우리는 지불을하는 차용자의 비율이 대조군보다 치료 그룹에서 훨씬 더 높음을 관찰했습니다.이것은 전화 통화가 모든 차용자에게 평균적으로 상환을 효과적으로 장려한다는 의미에서“효과적”이라는 증거를 제공했습니다.이것은평균 치료 효과(먹었다).ATE의 정량화는 A / B 테스트의 일반적인 결과입니다.

그러나 우리가 관찰 한 대부분의 ATE에 대해 치료 그룹 내의 차용인 중 일부만이 책임이있을 수 있습니다.극단적 인 예로, 치료 그룹의 차용인 중 절반이 전체 ATE를 담당했을 수 있습니다.우리가 치료에 더 쉽게 대응할 수있는이 차용자를 미리 식별 할 수있는 방법이 있다면, 우리는 그들에게 전화 자원을 집중할 수있을 것이며 전화 통화가 거의 또는 전혀없는 사람들에게 시간을 낭비하지 않을 것입니다.효과.비 응답자를 참여시킬 다른 방법을 찾아야 할 수도 있습니다.이 사람들이 가지고있는 다양한 특성에 따라 사람마다 다양한 치료 효과를 결정하는 과정은 우리가조건부 평균 치료 효과(CATE).여기에서 머신 러닝과 예측 모델링이 등장합니다.

향상 모델 구축 및 설명

기계 학습에서 우리는 다음을 통해 차용자 간의 차이점을 설명 할 수 있습니다.풍모, 차용자에게 특정한 다양한 수량입니다.차용인의 결제 내역, 과거 전화 통화 결과 및 Tala 앱과의 상호 작용과 관련된 기능을 설계했습니다.이 기능은 차용인의갚을 의지와 능력,뿐만 아니라Tala와의 관계 구축 및 유지.차용인은듣고 배우다그들과 똑같이 할 수있는 기회를 주겠습니까?

위에서 설명한 기능과 모델링 프레임 워크로 무장 한 우리는 업 리프트 모델을 구축 할 준비가되었습니다.우리는 S-Learner라는 접근 방식을 사용했습니다.이에 대한 자세한 내용은업 리프트 모델링에 대한 이전 블로그 게시물.S-Learner를 구축하고 테스트 한 후 목표 변수 인 uplift (치료를 받고 치료하지 않은 예측 확률의 차이)와 S-Learner를 교육하는 데 사용되는 동일한 기능을 사용하여 교육 세트에 대해 별도의 회귀 모델을 교육했습니다.(S-Learner 접근 방식의 기능으로 간주되는 처리 플래그 제외).이 회귀 모델의 테스트 세트 SHAP 값을 사용하여 어떤 모델 기능이 상승 예측에 가장 큰 영향을 미치는지에 대한 통찰력을 얻을 수있었습니다.

여기서는 기능 이름이 익명으로 처리되었지만 가장 예측 가능한 기능에 대한 해석은 지불 의사가 있고, 대출 경험이 있으며, 다시 빌리고 싶을 수 있고, 전화를 통해 연락을받는 차용인이전화를 통해 상환하도록 장려 할 가치가있는 차용인.

상승 모델에 대한 SHAP 값으로, 예측에 영향을 미치는 상위 5 개의 익명화 된 요인을 나타냅니다.기능은 차용인의 지불 및 전화 통화 내역을 기반으로합니다.작성자의 이미지.

모델 사용 및 모니터링을위한 전략 설계

예측 된 확률 상승을 아는 것이 모델 기반 전략의 첫 번째 단계였습니다.그러나 우리는 누군가가 지불 할 가능성이 얼마나 더 높은지뿐만 아니라 전화 지원으로 인한 지불 금액의 증가 가능성에도 관심이 있습니다.이를 결정하기 위해 확률 증가를 차용자가 빚진 금액 및 지불 가능한 금액에 대한 정보와 결합했습니다.이것은 예측 된 확률 상승을수익 증가전화를 걸면 얼마나 가치가 있는지 차용인의 순위를 매길 수 있습니다.

예상 수익 상승에 대한 차용자의 순위를 매기는 기회는 예측 수익 상승의 여러 빈에 대한 처리 그룹과 통제 그룹 간의 평균 수익 차이로 실제 수익 상승을 계산하여 볼 수 있습니다.이러한 분석은 상세한 상향 십 분위수 차트의 아이디어와 유사합니다.여기.이를 위해 모델 테스트 세트를 사용했습니다.

수익 증가 십 분위수 차트 : 예상 수익 증가를 기준으로 계정의 순위를 매길 때 처리 및 통제 간의 평균 수익 차이입니다.작성자의 이미지.

결과에 따르면 예상 수익 증가는 전화 통화가 더 가치있는 계정을 효과적으로 식별합니다.이러한 방식으로 순위를 매긴 차용인 중 상위 10 % 만 호출하면 모든 차용자를 호출하여 사용할 수있는 증분 수익의 절반 이상을 얻을 수 있으며, 차용인 상위 절반을 호출하면 증분 수익의 90 %를 얻을 수 있습니다.실제로 녹색 선으로 표시된 차용자 당 전화 통신 서비스의 평균 비용을 고려할 때 차용자의 상위 50 % 만 전화를 걸 수있는 것이 분명합니다.

예상 수익 증가를 사용하여 전화 통신 지원을 안내 할 수있는 분명한 기회를 고려하여이 모델을 배포하여 전략을 안내했습니다.배포 후 모델 성능을 모니터링하기 위해 예측 된 전체 범위에서 전화 통화의 실제 증가를 조사 할 수있는 두 그룹을 만들었습니다.우리는 예상되는 상승률에 관계없이 무작위로 선택된 5 %의 대출자를 호출하고 다른 5 %를 호출하지 않음으로써이를 수행했습니다.이 테스트의 결과를 바탕으로 여기와 제 사이트에 표시된 것과 동일한 종류의 모델 평가 메트릭을 사용하여 모델이 프로덕션에서 의도 한대로 작동하고 있다는 결론을 내릴 수있었습니다.동반자 블로그 게시물.

결론적으로, 업 리프트 모델링을 통해 Tala는 이러한 노력을 가장 잘 수용 할 수있는 대출자에게 상환 노력을 집중하여 시간과 비용을 절약 할 수있었습니다.향상 모델링에 대한 Tala의 경험이 귀하의 작업에 도움이 되었기를 바랍니다.

원래 게시 된 위치https://tala.co2021 년 1 월 14 일.

Understanding Mixed Precision Training -번역

혼합 정밀도 훈련 이해

신경망 훈련을위한 혼합 정밀도는 모델 성능에 영향을주지 않고 훈련 시간과 메모리 요구 사항을 줄일 수 있습니다.

Image for post

딥 러닝 방법론이 발전함에 따라 신경망의 크기를 늘리면 성능이 향상된다는 데 일반적으로 동의했습니다.그러나 이는 메모리 및 컴퓨팅 요구 사항에 해를 끼치며 모델 학습을 위해 증가시켜야합니다.

이것은 Google의 사전 학습 된 언어 모델의 성능을 비교하여 관점에서 볼 수 있습니다.BERT, 다양한 아키텍처 크기에서.원래종이, Google의 연구원들은 평균접착제BERT-Base 79.6 점, BERT-Large 82.1 점.2.5의이 작은 증가는 추가로 230M 매개 변수 (110M 대 340M)를 가져 왔습니다!

아르 자형계산을해도 각 매개 변수가 32 바이트의 정보 인 단 정밀도 (아래에서 자세히 설명)로 저장되면 230M 매개 변수는 메모리에서 0.92Gb와 동일합니다.이것은 그 자체로는 너무 크지 않은 것처럼 보일 수 있지만 각 훈련 반복 동안 이러한 매개 변수는 일련의 행렬 산술 단계를 거쳐 기울기와 같은 추가 값을 계산합니다.이러한 모든 추가 값은 빠르게 관리 할 수 없게 될 수 있습니다.

2017 년에 NVIDIA의 연구원 그룹은종이라는 기술을 사용하여 신경망 훈련의 메모리 요구 사항을 줄이는 방법을 자세히 설명합니다.혼합 정밀 교육 :

모델 정확도를 잃거나 하이퍼 파라미터를 수정할 필요없이 반 정밀도 부동 소수점 숫자를 사용하여 심층 신경망을 훈련하는 방법을 소개합니다.이것은 메모리 요구 사항을 거의 절반으로 줄이고 최근 GPU에서 산술 속도를 높입니다.

이 기사에서는 혼합 정밀도 훈련이 딥 러닝의 표준 알고리즘 프레임 워크에 어떻게 부합하는지와 모델 성능에 영향을주지 않고 계산 수요를 줄일 수있는 방법을 이해하는 방법을 살펴볼 것입니다.

부동 소수점 정밀도

이진 형식으로 부동 소수점 숫자를 나타내는 데 사용되는 기술 표준은 다음과 같습니다.IEEE 754, 1985 년 전기 전자 공학 연구소에서 설립.

IEEE 754에 명시된대로 2 진 16 (절반 정밀도)에서 2 진 256 (8 진 정밀도)까지 다양한 수준의 부동 소수점 정밀도가 있습니다. 여기서 “2 진”뒤의 숫자는 부동 소수점을 나타내는 데 사용할 수있는 비트 수와 같습니다.-포인트 값.

비트가 부호에 대해 예약 된 단일 비트를 사용하여 숫자의 이진 형식을 나타내는 정수 값과 달리 부동 소수점 값도 지수를 고려해야합니다.따라서 이러한 숫자를 이진 형식으로 표현하면 더 미묘하고 정밀도에 상당한 영향을 미칠 수 있습니다.

역사적으로 딥 러닝은 매개 변수를 표현하기 위해 단 정밀도 (binary32 또는 FP32)를 사용했습니다.이 형식에서 1 비트는 부호, 8 비트는 지수 (-126 ~ +127), 23 비트는 숫자로 예약되어 있습니다.반면에 반 정밀도 또는 FP16은 부호에 대해 1 비트, 지수에 대해 5 비트 (-14 ~ +14), 숫자에 대해 10을 예약합니다.

Image for post

그러나 이것은 비용이 듭니다.각각에 대한 최소 및 최대 양수, 정상 값은 다음과 같습니다.

Image for post

뿐만 아니라 모든 지수 비트가 0으로 설정된 더 작은 비정규 화 된 숫자를 나타낼 수 있습니다.FP16의 경우 절대 한계는 2 ^ (-24)입니다. 그러나 비정규 화 된 숫자가 작아 질수록 정밀도가 감소합니다.

이 기사에서 부동 소수점 정밀도의 정량적 한계를 이해하기 위해 여기서 더 깊이 들어 가지 않을 것이지만 IEEE는 포괄적 인선적 서류 비치추가 조사를 위해.

혼합 정밀 훈련

신경망 FP32의 표준 훈련 중에 증가 된 메모리 요구 사항으로 모델 매개 변수를 나타냅니다.혼합 정밀도 훈련에서 FP16은 훈련 반복 중에 가중치, 활성화 및 기울기를 저장하는 데 대신 사용됩니다.

그러나 위에서 보았 듯이 FP16이 저장할 수있는 값의 범위가 FP32보다 작고 숫자가 매우 작아 질수록 정밀도가 떨어지기 때문에 문제가 발생합니다.그 결과 계산 된 부동 소수점 값의 정밀도에 따라 모델의 정확도가 감소합니다.

이를 방지하기 위해 가중치의 마스터 사본이 FP32에 저장됩니다.이것은 각 훈련 반복의 일부 동안 FP16으로 변환됩니다 (1 회 전진 패스, 역 전파 및 가중치 업데이트).반복이 끝나면 가중치 기울기를 사용하여 최적화 단계에서 마스터 가중치를 업데이트합니다.

Image for post

여기에서 가중치의 FP32 사본을 유지하는 이점을 볼 수 있습니다.학습률이 종종 작기 때문에 가중치 기울기를 곱하면 종종 작은 값이 될 수 있습니다.FP16의 경우 크기가 2 ^ (-24)보다 작은 숫자는 표현할 수 없기 때문에 0과 동일합니다 (FP16의 비정규 화 된 한계입니다).따라서 FP32에서 업데이트를 완료하면 이러한 업데이트 값을 유지할 수 있습니다.

FP16과 FP32를 모두 사용하기 때문에이 기술이 호출됩니다.혼합-정밀 교육.

손실 스케일링

혼합 정밀도 훈련은 대부분 정확도 유지 문제를 해결했지만 실험 결과 학습률을 곱하기 전에도 작은 기울기 값이 발생하는 경우가있었습니다.

NVIDIA 팀은 2 ^ -27 미만의 값이 주로 훈련과 관련이 없지만 보존하는 데 중요한 [2 ^ -27, 2 ^ -24) 범위의 값이 있지만 FP16 한계를 벗어난 값이 있음을 보여주었습니다.훈련 반복 동안 0으로 동일시합니다.정밀도 한계로 인해 기울기가 0과 같은이 문제를 언더 플로우라고합니다.

따라서 그들은 손실 스케일링을 제안하는데, 이는 순방향 패스가 완료된 후 역 전파 전에 손실 값에 스케일 팩터를 곱하는 프로세스입니다.그만큼연쇄 법칙모든 그라디언트가 FP16 범위 내에서 이동 한 동일한 요소에 의해 이후에 배율이 조정됨을 나타냅니다.

그래디언트가 계산되면 이전 섹션에서 설명한대로 FP32에서 마스터 가중치를 업데이트하는 데 사용되기 전에 동일한 배율로 나눌 수 있습니다.

Image for post

NVIDIA “딥 러닝 성능”선적 서류 비치, 배율 인수 선택에 대해 설명합니다.이론적으로는 오버플로로 이어질만큼 충분히 크지 않는 한 큰 스케일링 계수를 선택하는 데 단점이 없습니다.

스케일링 계수를 곱한 기울기가 FP16의 최대 제한을 초과하면 오버플로가 발생합니다.이 경우 그래디언트가 무한이되고 NaN으로 설정됩니다.신경망 훈련의 초기 시대에 다음 메시지가 나타나는 것은 비교적 일반적입니다.

그라데이션 오버플로.스킵 단계, 손실 스케일러 0 손실 스케일 감소…

이 경우 무한 기울기를 사용하여 가중치 업데이트를 계산할 수없고 향후 반복을 위해 손실 척도가 감소하므로 단계를 건너 뜁니다.

자동 혼합 정밀도

2018 년에 NVIDIA는파이 토치전화꼭대기, 여기에는 AMP (자동 혼합 정밀도) 기능이 포함되어 있습니다.이것은 PyTorch에서 혼합 정밀도 훈련을 사용하기위한 간소화 된 솔루션을 제공했습니다.

단 몇 줄의 코드로 훈련을 FP32에서 GPU의 혼합 정밀도로 이동할 수 있습니다.이것은두 가지 주요 이점:

  • 훈련 시간 단축— 훈련 시간은 모델 성능의 현저한 감소없이 1.5 배에서 5.5 배까지 감소 된 것으로 나타났습니다.
  • 메모리 요구 사항 감소— 이것은 아키텍처 크기, 배치 크기 및 입력 데이터 크기와 같은 다른 모델 요소를 증가시키기 위해 메모리를 확보했습니다.
Image for post

PyTorch 1.6부터 NVIDIA와 Facebook (PyTorch의 제작자)은이 기능을 핵심 PyTorch 코드로 옮겼습니다.torch.cuda.amp.이를 통해 버전 호환성 및 확장 빌드의 어려움과 같은 Apex 패키지를 둘러싼 몇 가지 문제점이 해결되었습니다.

이 기사에서는 AMP의 코드 구현에 대해 더 이상 설명하지 않지만 PyTorch에서 예제를 볼 수 있습니다.선적 서류 비치.

결론

부동 소수점 정밀도는 종종 간과되지만 딥 러닝 모델의 훈련에서 중요한 역할을합니다. 여기서 작은 기울기와 학습률이 증가하여 더 많은 비트를 정확하게 표현해야하는 기울기 업데이트를 생성합니다.

그러나 최첨단 딥 러닝 모델이 작업 성능 측면에서 경계를 확장함에 따라 아키텍처가 성장하고 정밀도가 훈련 시간, 메모리 요구 사항 및 사용 가능한 컴퓨팅과 균형을 이루어야합니다.

따라서 본질적으로 메모리 사용량을 절반으로 줄이면서 성능을 유지하는 혼합 정밀도 훈련의 능력은 딥 러닝의 중요한 발전입니다!

Statistics, Eugenics, and Me -번역

통계, 우생학 및 나

내 분야의 기원을 인정하지 못한 것에 대한 개인적인 계산

이번 주에는 홀로 코스트 메모리얼 데이와 가장 저명한 우생 학자들의 집이었던 University College London (UCL)의 통계학과에서 공부 한 5 년이 끝났습니다.

이번 주까지는 Galton Lecture Theatre와 Pearson Building에서 칼 피어슨과 로널드 피셔의 작품을 공부 한 것이 신경 쓰이지 않았습니다.하지만 그래야만했다.

우리 가족의 대부분은 T에서 살해당했습니다h“열등한 인종”을 근절하기위한 정권의 일환으로 홀로 코스트.그러나 나는 여전히 피어슨, 피셔, 갈튼 (그리고 다른 사람들)을 그들의 기여에 대해 인정 받고 존경받을 자격이있는 통계의 아버지로 여겼다.나는 그들이 시간의 산물이고 그들의 연구가 유전학이면의 통계에서 자연스러운 진보라고 순진하게 생각했습니다.이것은 사실이 아닙니다.

Image for post

27th January 2021 — Holocaust Memorial Day — Photo by David Tomaseti on Unsplash

Sir Francis Galton

Francis Galton, “행동 및 교육 통계 분야의 창시자”: ¹

  • 설문지 사용 개척
  • 평균에 대한 회귀 발견
  • 상관 관계와 회귀를 재발견하고이를 인류학, 심리학 등에 적용하는 방법을 발견했습니다.
  • 표준 편차 개념 정의

Galton은 통계 개발에 매우 근본적으로 중요하고 비판적인 것으로 간주되어 많은 사람들이 1883 년 그의 우생학 분야 설립을 의도적으로 간과 할 것입니다.

그의 시간의 산물?

Galton의 삶에 관한 4 권의 책을 검토하면서 Clauser (2007) ¹는이 주장을 사용하여 한 권의 책을 비판합니다.

‘당시의 산물’주장은 수년 동안 편협함을 정당화하기 위해 끊임없이 사용됩니다.이를 관점에서 살펴보면 Galton은 그의 사촌의 작품 인 The Origin of Species에서 영감을 얻었습니다.다윈은 특정 인구를 설명하기 위해 ‘야만인’과 같은 단어를 사용했기 때문에 당시의 산물이라고 할 수 있습니다.그러나 Darwin은 인종 차별에 대해 공개적으로 반대했으며 Galton의 우생학에 대한 연구를 홍보하거나 기여하지 않았습니다 .² Galton의 ‘우생학’에서 타고난 인종주의에 대해 의문이있는 경우 다음은 그의 용어를 만든 이유입니다.

그리고 Galton의 견해에 대해 여전히 의심이 있다면 그는 또한 다음과 같이 썼습니다.

대학 첫날 Galton Lecture Theatre에 앉았을 때 Galton이 대량 학살이 ‘대부분의 경우 상당히 비합리적’이라고 느꼈다고 들었다면 그의 이름과 내 주변의 사진에 대해 덜 편안하게 느꼈을 것입니다.내 연구는 근본적으로 Galton의 연구에 의존하고 있으며 Galton에게 빚을졌습니다.그렇다고 3 년 동안 매일 그의 이름을 듣고 말해야한다는 의미는 아닙니다.

UCL Galton Exhibition

UCL에서 열린 Galton 전시회는 우생학에 대한 그들의 기여에 대한 인식을 높이기 위해 열렸습니다.크레딧 : UCL Image Store.⁵

칼 피어슨

Karl Pearson은 Galton의 제자이자 많은 주목할만한 업적 중 하나입니다.

  • 가설 테스트 개발
  • p- 값 사용 개발
  • 카이-제곱 검정 정의
  • 순간의 방법 도입

반세 미티

Mein Kampf가 출판 된 해에 Pearson은 유대인 인구에 대해 다음과 같이 썼습니다.

그리고 히틀러가 수상이되었을 때 피어슨은 다음과 같이 말했습니다.

그의 경고가 즉시 나타날 때까지 합리적으로 보일 수 있습니다.

나는 Pearson 건물의 작은 교실에서 Pearson의 작업에 근본적으로 의존하는 프레젠테이션으로 학부를 마쳤습니다.UCL의 우생학과의 첫 번째 의장 인 피어슨은 내가 무시할 수없고 무시할 수없는 방식으로 내 삶과 일에 기여해 왔습니다.그의 공헌은 통계 분야와 다른 많은 분야에 필수적이었습니다.그러나 다시 나는 내가 Pearson 건물을 걷는 것이 편하다고 느꼈을 지 궁금해합니다.

Image for post

UCL 피어슨 빌딩 (왼쪽), 1985.⁸크레딧 : UCL 이미지 스토어.

로널드 피셔 경

Fisher의 통계 작업은 통계적 추론의 많은 중요한 방법을 수립하고 장려했습니다.그의 공헌은 다음과 같습니다.

  • 유의 한 p- 값에 대한 정규 임계 값으로 p = 0.05 설정
  • 최대 가능성 추정 촉진
  • 분석 분석 (ANOVA) 개발
  • 그만큼아이리스데이터 세트 (이것은 믿을 수 없을 정도로 사소한 기여로 보이지만 매일 사용합니다) ⁹

Pearson과 Galton처럼 Fisher는 존경 받았습니다.’다윈 이후 가장 위대한 생물 학자’가 누구인지 물었을 때 Richard Dawkins는 Fisher¹⁰를 지명했습니다 (도킨스가 공개 한 견해를 감안할 때 놀라운 일이 아닐 수 있음).Fisher의 학생 중 한 명인 Bodmer는 Fisher의 삶에 대한 짧지 만 빛나는 전기를 썼고 Fisher를“달콤”하고“좋다”라고 묘사했습니다 .¹¹ 우생학에 대해서는 언급하지 않았습니다.

나치 우생 학자 Otmar Freiherr von Verschuer에 대해 Fisher는 다음과 같이 썼습니다.

저는 UCL에서 3 학년이 될 때까지 Fisher의 이름을 접하지 못했으며 다시 한 번 훌륭한 통계학 자로 찬사를 받았습니다.말할 것도없이 대량 학살은 논의되지 않았습니다.

건물 및 성명

최근 기사에서 사람들의 이름을 딴 건물에 대해 설명합니다.

사람에 대한 포괄적 인 진술도 마찬가지입니다.나는 Dawkins가 Fisher를“Darwin 이래로 가장 위대한 생물 학자”라고 묘사했을 때 이것은 순수한 산출물과 그 분야에만 기여한 것에 근거한 것이라고 생각합니다.그러나 피셔의 이름을 딴 건물처럼“가장 큰”이라는 단어는 그 사람 자체에 대한 판단을 포함합니다.이 사람이 “위대한”사람이라고 암시 적으로 가정하고 우리는 자동으로 “위대한”이 “좋은”을 의미한다고 가정합니다 (정의의 일부는 아니지만).주석이없는 기념관과 마찬가지로 전면적 인 진술은 그들이 드러내는 것보다 더 많은 것을 숨 깁니다.

통계와 우생학의 아버지

건물과 강의실의 이름을 바꾸는 것은 쉽습니다.오래전에 취해야 할 조치이지만 UCL을 비판하는 것은 아닙니다.공로로 그들은 정보를 수집하고 모든 사람의 피드백과 의견을 듣기 위해 설문 조사를 실시하는 데 수년을 보냈습니다.

통계 또는 데이터 과학 분야에서 일하는 것은 우생학의 그늘에서 일하는 것입니다.5 년 동안 나는 내가이 그림자 아래 있다는 사실조차 알지 못했고 매우 부끄럽습니다.하지만 나 자신을 탓할 수는 없습니다.나는 제공된 방정식을 사용하고 내가들은 방법을 연구했지만 방법에 속하는 이름은 고려하지 않았습니다.나는 다른 수학자 및 통계 학자와 다수가 될 가능성이 있다고 생각합니다.이것은 괜찮지 않습니다.나는 모든 통계 과정에 통계의 전체 역사와 그“아버지”에 대한 강의가 최소한 하나 포함되어야한다고 생각합니다.

실패에서 성공

건물의 이름이 바뀌어도‘Pearson ’s Chi-Squared test’와‘Fisher ’s information’을 (매일) 사용하겠습니다.그들의 이름은 저와 영원히 붙어 있고 이제 그들의 신념도 그렇습니다.나는이 사람들이 통계에 기여한 것을 존중하고 영감을받을 것이지만, 이제 그들의 성격을 칭찬하거나 우연히 그들의 신념을 용인하지 않고도 그들에 대해 이야기 할 수 있습니다.나는 과거의 방법을 활용하여 미래의 긍정적, 선, 윤리적 선택을 촉진 할 것입니다.다른 사람들이 실패한 부분을 배우면 여러 세대의 통계학자가 성공하는 방법을 배울 수 있습니다.

우리 시대의 제품

안타깝게도 경고로만 끝낼 수 있습니다.우생학이 현대 정치에서 다시 등장 할 가능성은 거의 없지만 (불가능하지는 않지만), 통계와 데이터는 그 어느 때보 다 조작되고 있습니다.

잘못된 결과를 반환하는 기계 학습의 순진한 오용에서 원시 데이터의 악의적 인 조작에 이르기까지이 분야는 테스트되고 있습니다.정부에서 개인, 러시아에서 팔로 알토, 안티 마스 커에서 안티 백서까지;데이터 및 통계 과실의 전체 결과는 아직 알려지지 않았습니다.

이런 일이 일어나 자 멍하니 앉아 있으면 우리는 ‘그 시대의 산물’이 될 것입니다.이것만으로는 충분하지 않습니다.데이터 과학에는 더 많은 규제가 필요합니다.의사들은 히포크라테스 선서가 있습니다. 우리는 나이팅게일 선서를하지 않는 이유는 무엇입니까?“데이터 나 결과를 조작하지 마십시오.통계의 윤리적 사용을 장려합니다.이해하는 모델 만 훈련하십시오.우생학을 홍보하지 마십시오”.

플로렌스 나이팅게일, 통계의 어머니, 좋은 사람 .¹⁴ 크레딧 :https://en.wikipedia.org/wiki/File:Florence_Nightingale_(H_Hering_NPG_x82368).jpg

참고 문헌

¹Clauser BE.Francis Galton의 삶과 노동 : 행동 통계의 아버지에 관한 4 개의 최근 책 리뷰.교육 및 행동 통계 저널.2007; 32 (4) : 440–444.도이 : 10.3102 / 1076998607307449
²https://medium.com/science-and-philosophy/charles-darwin-on-racism-slavery-and-eugenics-cb6416b8277c
³Galton..맥밀란.1883. p.24.
⁴Charny, Israel W .;아달 리안, 루벤 폴;Jacobs, Steven L .;Markusen, Eric;Sherman, Marc I. (1999)..ABC-CLIO.피.218.ISBN 978–0–87436–928–1.
https://imagestore.ucl.ac.uk/imagestore/start/images?view=preview&fuid=UCL%20Library/Library%20Events/Galton%20Exhibition%20Opening/Galton_Exhb_0025.tif
⁶Pearson, Karl;Moul, Margaret (1925).“러시아와 폴란드 유태인 어린이들의 시험으로 설명 된 영국으로의 외국인 이민 문제”..나는(2) : 125–126.도이:10.1111 / j.1469–1809.1925.tb02037.x.
⁷Pearson, Karl (1933).“골짜기!”..5(4) : 416.도이:10.1111 / j.1469–1809.1933.tb02102.x.
https://bartlett100.com/article/bartlett-buildings-the-pearson-building.html
https://www.garrickadenbuie.com/blog/lets-move-on-from-iris
¹⁰https://www.edge.org/conversation/who-is-the-greatest-biologist-of-all-time
¹¹Walter Bodmer, RA Fisher, 통계 학자 겸 유전 학자 특별 : 개인적인 관점,, 32 권, 6 호, 2003 년 12 월, 페이지 938–942,https://doi.org/10.1093/ije/dyg289
¹²타락 이후 : Otmar Freiherr von Verschuer의 전후 경력에서 정치적 화이트 워싱, 전문적인 자세 및 개인 재구성.Sheila Faith Weiss.Isis 2010 101 : 4, 722–758
¹³https://www.newstatesman.com/international/science-tech/2020/07/ra-fisher-and-science-hatred
¹⁴https://en.wikipedia.org/wiki/Florence_Nightingale#/media/File:Florence_Nightingale_(H_Hering_NPG_x82368).jpg.

20 Examples to Master Pandas Series -번역

판다 시리즈를 마스터하기위한 20 가지 예

Pandas의 핵심 데이터 구조

Photo by Yannis Zaugg on Unsplash

Pandas는 Python을위한 매우 인기있는 데이터 분석 및 조작 라이브러리입니다.데이터를 표 형식으로 처리 할 수있는 다양하고 강력한 기능을 제공합니다.

Pandas의 두 가지 핵심 데이터 구조는 DataFrame과 Series입니다.DataFrame은 레이블이있는 행과 열이있는 2 차원 구조입니다.SQL 테이블과 유사합니다.시리즈는 레이블이 지정된 1 차원 배열입니다.시리즈의 값 레이블을 인덱스라고합니다.DataFrame과 Series는 모든 데이터 유형을 저장할 수 있습니다.

이 기사에서는 시리즈에서 수행 할 수있는 다양한 작업을 보여주는 20 개의 예제를 살펴 보겠습니다.

먼저 라이브러리를 가져온 다음 예제부터 시작하겠습니다.

numpy를 np로 가져 오기
팬더를 pd로 가져 오기

1. DataFrame is composed of Series

DataFrame의 개별 행 또는 열은 시리즈입니다.

왼쪽의 DataFrame을 고려하십시오.특정 행이나 열을 선택하면 반환되는 데이터 구조는 시리즈입니다.

a = df.iloc [0, :]
인쇄 (유형 (a))
pandas.core.series.Series
b = df [0]
유형 (b)
pandas.core.series.Series

2. Series consists of values and index

시리즈는 레이블이있는 배열입니다.인덱스라고하는 값과 레이블에 액세스 할 수 있습니다.

ser = pd.Series ([ 'a', 'b', 'c', 'd', 'e'])print (ser.index)
RangeIndex (시작 = 0, 중지 = 5, 단계 = 1)
print (ser.values)
['에이 비 씨 디이']

3. Index can be customized

이전 예에서 볼 수 있듯이 0부터 시작하는 정수 인덱스는 기본적으로 Series에 할당됩니다.그러나 index 매개 변수를 사용하여 변경할 수 있습니다.

ser = pd.Series ([ 'a', 'b', 'c', 'd', 'e'], 인덱스 = [10,20,30,40,50])print (ser.index)
Int64Index ([10, 20, 30, 40, 50], dtype = 'int64')

4. Series from a list

우리는 이미 이전 예제에서 이것을 보았습니다.목록을 Series 함수에 전달하여 Series를 만들 수 있습니다.

list_a = [ '데이터', '과학', '기계', '학습']ser = pd.Series (list_a)유형 (ser)
pandas.core.series.Series

5. Series from a NumPy array

시리즈를 만드는 또 다른 일반적인 방법은 NumPy 배열을 사용하는 것입니다.목록에서 만드는 것과 같습니다.Series 함수에 전달 된 데이터 만 변경합니다.

arr = np.random.randint (0, 10, 크기 = 50)ser = pd.Series (arr)

6. Accessing individual values

시리즈에는 레이블이 지정된 항목이 포함되어 있으므로 레이블 (즉, 색인)을 사용하여 특정 항목에 액세스 할 수 있습니다.

ser = pd.Series ([ 'a', 'b', 'c', 'd', 'e'])인쇄 (ser [0])
인쇄 (ser [2])

7. Slicing a Series

인덱스를 사용하여 Series를 분할 할 수도 있습니다.

ser = pd.Series ([ 'a', 'b', 'c', 'd', 'e'])print (ser [: 3])
0 a
1b
2 개 c
dtype : 개체
print (ser [2 :])
2 개 c
3 일
4 e
dtype : 개체

8. Data types

Pandas는 Series를 만들 때 적절한 데이터 유형을 할당합니다.dtype 매개 변수를 사용하여 변경할 수 있습니다.물론 적절한 데이터 유형을 선택해야합니다.

ser1 = pd.Series ([1,2,3,4,5])
인쇄 (ser1)
0 1
1 2
2 3
3 4
4 5
dtype : int64
ser2 = pd.Series ([1,2,3,4,5], dtype = 'float')
0 1.0
1 2.0
2 3.0
3 4.0
4 5.0
dtype : float64

9. Number of items in a Series

시리즈의 값 수를 계산하는 방법에는 여러 가지가 있습니다.컬렉션이기 때문에 파이썬에 내장 된 len 함수를 사용할 수 있습니다.

ser = pd.Series ([1,2,3,4,5])len (ser)
5

Pandas의 크기 및 모양 기능을 사용할 수도 있습니다.

ser.size
5
ser.shape
(5,)

shape 함수는 각 차원의 크기를 반환합니다.Series는 1 차원이므로 shape 함수에서 길이를 얻습니다.Size는 Series 또는 DataFrame의 전체 크기를 반환합니다.DataFrame에서 사용되는 경우 size는 행과 열 수의 곱을 반환합니다.

10. 독특하고 Nunique

unique 및 nunique 함수는 각각 고유 값과 고유 값 수를 반환합니다.

ser = pd.Series ([ 'a', 'a', 'a', 'b', 'b', 'c'])ser.unique ()
배열 ([ 'a', 'b', 'c'], dtype = object)
ser.nunique ()

11. Largest and smallest values

nlargest 및 nsmallest 함수는 Series에서 가장 큰 값과 가장 작은 값을 반환합니다.기본적으로 5 개의 가장 큰 값 또는 가장 작은 값을 얻지 만 n 매개 변수를 사용하여 변경할 수 있습니다.

ser = pd.Series (np.random.random (size = 500))ser.nlargest (n = 3)
292 0.997681
236 0.997140
490 0.996117
dtype : float64
ser.nsmallest (n = 2)
157 0.001499
140 0.002313
dtype : float64

12. Series from a dictionary

시리즈 함수에 사전을 전달하면 반환 된 시리즈에는 사전 값이 포함됩니다.색인은 사전의 키입니다.

dict_a = { 'a': 1, 'b': 2, 'c': 8, 'd': 5}pd. 시리즈 (dict_a)
a 1
b 2
c 8
d 5
dtype : int64

13. Converting data type

시리즈를 생성 할 때 데이터 유형을 선택할 수있는 옵션이 있습니다.Pandas는 나중에 데이터 유형을 변경할 수도 있습니다.

예를 들어, 다음 시리즈는 정수를 포함하지만 dtype 객체로 저장됩니다.astype 함수를 사용하여 정수로 변환 할 수 있습니다.

ser = pd.Series ([ '1', '2', '3', '4'])ser
0 1
1 2
2 3
3 4
dtype : 개체
ser.astype ( 'int')
0 1
1 2
2 3
3 4
dtype : int64

14. Number of occurrences of values

value_counts 함수는 Series에서 각 고유 값의 발생 횟수를 반환합니다.값 분포에 대한 개요를 얻는 것이 유용합니다.

ser = pd.Series ([ 'a', 'a', 'a', 'b', 'b', 'c'])ser.value_counts ()
3
b 2
c 1
dtype : int64

15. From series to list

목록에서 시리즈를 만들 수있는 것처럼 시리즈를 목록으로 변환 할 수 있습니다.

ser = pd.Series (np.random.randint (10, 크기 = 10))ser.to_list ()
[8, 9, 0, 0, 7, 1, 8, 6, 0, 8]

16. Null values

시리즈에 누락 된 값이있을 가능성이 있습니다.Pandas를 사용하면 누락 된 값을 감지하고 처리하는 것이 매우 간단합니다.

예를 들어, count 함수는 계열에서 결 측값이 아닌 값의 수를 반환합니다.

ser = pd.Series ([1, 2, 3, np.nan, np.nan])ser.count ()

17. Null values — 2

결 측값을 감지하는 또 다른 방법은 isna 함수입니다.True로 누락 된 값을 나타내는 부울 값이있는 Series를 반환합니다.

ser = pd.Series ([1, 2, 3, np.nan, np.nan])ser.isna ()
0 거짓
1 거짓
2 거짓
3 참
4 참
dtype : 부울

합계 함수를 isna 함수와 연결하여 누락 된 값의 수를 계산할 수 있습니다.

ser.isna (). sum ()
2

18. Rounding up floating point numbers

데이터 분석에서 우리는 숫자 값을 가질 가능성이 가장 높습니다.Pandas는 숫자 데이터를 조작 할 수있는 능력이 뛰어납니다.예를 들어, round 함수를 사용하면 부동 소수점 숫자를 특정 소수점까지 반올림 할 수 있습니다.

다음 시리즈를 고려하십시오.

ser
0 0.349425
1 0.552831
2 0.104823
3 0.899308
4 0.825984
dtype : float64

round 함수가 사용되는 방법은 다음과 같습니다.

ser.round (2)
0 0.35
1 0.55
2 0.10
3 0.90
4 0.83
dtype : float64

19. Logical operators

같음, 작음 또는보다 큼과 같은 논리 연산자를 Series에 적용 할 수 있습니다.True로 지정된 조건에 맞는 값을 나타내는 부울 값이있는 Series를 반환합니다.

ser = pd.Series ([1, 2, 3, 4])ser.eq (3)
0 거짓
1 거짓
2 참
3 거짓
dtype : 부울
ser.gt (2)
0 거짓
1 거짓
2 참
3 참
dtype : 부울

논리 연산자의 전체 목록 :

  • lt : 이하
  • le : 작거나 같음
  • gt :보다 큼
  • ge : 크거나 같음
  • eq : 같음
  • ne : 같지 않음

20. 데이터 집계

평균, 합계, 중앙값 등과 같은 집계 함수를 시리즈에 적용 할 수 있습니다.시리즈에 별도로 적용하는 한 가지 방법입니다.

ser = pd.Series ([1, 2, 3, 4, 10])ser.mean ()
4

여러 집계 함수를 적용해야하는 경우 더 나은 방법이 있습니다.목록에서 agg 함수에 전달할 수 있습니다.

ser.agg ([ '평균', 'median', 'sum', 'count'])평균 4.0
중앙값 3.0
합계 20.0
카운트 5.0
dtype : float64

Conclusion

우리는 Series의 속성과 그것과 상호 작용하는 기능을 보여주는 20 개의 예제를 만들었습니다.DataFrame은 Series로 구성되어 있으므로 DataFrame만큼 중요합니다.

이 기사의 예제는 Series에서 일반적으로 사용되는 많은 데이터 작업을 다룹니다.물론 시리즈에서 사용할 수있는 더 많은 기능과 방법이 있습니다.필요에 따라 더 고급 또는 세부 작업을 배울 수 있습니다.

읽어 주셔서 감사합니다.의견이 있으면 알려주세요.

Are The New M1 Macbooks Any Good for Deep Learning? Let’s Find Out -번역

새로운 M1 맥북이 딥 러닝에 좋은가요?알아 보자

기본 딥 러닝 작업을위한 M1 Mac 대 Google Colab

Photo by veeterzy from Pexels

새로운 Apple M1 칩 뒤에는 많은 과장이 있습니다.지금까지 인텔이 제공 한 모든 것보다 우수한 것으로 입증되었습니다.그러나 이것이 딥 러닝에 어떤 의미가 있습니까?그것이 오늘 여러분이 알게 될 것입니다.

새로운 M1 칩은 단순한 CPU가 아닙니다.MacBook Pro에서는 8 코어 CPU, 8 코어 GPU 및 16 코어 신경 엔진으로 구성됩니다.프로세서와 GPU는 모두 이전 세대 Intel 구성보다 훨씬 우수합니다.

저는 이미 M1 칩이 얼마나 빠른지 시연했습니다.정규 데이터 과학 작업,하지만 딥 러닝은 어떻습니까?

에스hort 대답 — 예,이 부서에는 약간의 개선이 있습니다.하지만 이제는 Mac이Google Colab?Colab은 완전히 무료 옵션입니다.

기사는 다음과 같이 구성됩니다.

  • CPU 및 GPU 벤치 마크
  • 성능 테스트 — MNIST
  • 성능 테스트 — Fashion MNIST
  • 성능 테스트 — CIFAR-10
  • 결론

중요 사항

모든 데이터 과학 라이브러리가 아직 새로운 M1 칩과 호환되는 것은 아닙니다.TensorFlow (버전 2.4)가 제대로 작동하도록하는 것은 말처럼 쉽지 않습니다.

당신은 참조 할 수 있습니다이 링크.whlTensorFlow 용 파일 및 종속성입니다.이것은 macOS 11.0 이상에만 해당하므로 명심하십시오.

여러분이 보게 될 테스트는 어떤 식 으로든, 형태 나 형태가“과학적”이 아닙니다.에포크 당 평균 훈련 시간 만 비교합니다.

CPU 및 GPU 벤치 마크

먼저 기본 CPU 및 GPU 벤치 마크부터 시작하겠습니다.M1 칩이 장착 된 새로운 MacBook Pro와 2019 년의 기본 모델 (Intel)을 비교합니다.Geekbench 5테스트에 사용되었으며 아래 결과를 볼 수 있습니다.

이미지 1 — Geekbench 5 결과 (Intel MBP 대 M1 MBP) (작성자 별 이미지)

결과는 스스로를 말해줍니다.M1 칩은 2019 년 Mac에서 Intel 칩을 철거했습니다.지금까지는 유망 해 보입니다.

성능 테스트 — MNIST

MNIST 데이터 세트는 딥 러닝의 “hello world”와 같습니다.TensorFlow에 내장되어있어 훨씬 쉽게 테스트 할 수 있습니다.

다음 스크립트는 MNIST 데이터 세트에서 10 개의 Epoch에 대해 신경망 분류기를 훈련합니다.M1 Mac을 사용하는 경우mlcompute라인, 이것들은 일이 조금 더 빠르게 실행되도록 만듭니다.

위의 스크립트는 M1 MBP 및 Google Colab (CPU 및 GPU 모두)에서 실행되었습니다.아래에서 런타임 비교를 볼 수 있습니다.

이미지 2 — MNIST 모델 평균 학습 시간 (작성자 별 이미지)

결과는 새로운 Mac에 대해 다소 실망 스럽습니다.Colab은 CPU 및 GPU 런타임 모두에서이를 능가했습니다.Colab의 런타임 환경이 보장되지 않으므로 결과는 다를 수 있습니다.

성능 테스트 — Fashion MNIST

이 데이터 세트는 일반 MNIST와 매우 유사하지만 손으로 쓴 숫자 대신 옷 조각이 포함되어 있습니다.따라서 훈련에 동일한 신경망 아키텍처를 사용할 수 있습니다.

보시다시피 여기서 변경된 유일한 것은 데이터 세트를로드하는 데 사용되는 함수입니다.동일한 환경에 대한 런타임 결과는 다음과 같습니다.

이미지 3 — Fashion MNIST 모델 평균 교육 시간 (작성자 별 이미지)

다시 한 번 비슷한 결과를 얻었습니다.이 데이터 세트는 MNIST와 매우 유사하므로 예상됩니다.

하지만 더 복잡한 데이터 세트와 신경망 아키텍처를 도입하면 어떻게 될까요?

성능 테스트 — CIFAR-10

CIFAR-10은 또한 “hello world”딥 러닝 데이터 세트의 범주에 속합니다.여기에는 비행기, 새, 고양이, 개, 배, 트럭 등 10 가지 범주의 60K 이미지가 포함되어 있습니다.

이미지의 크기는 32x32x3이므로 사람도 분류하기 어려운 경우도 있습니다.아래 스크립트는 세 개의 컨벌루션 레이어를 사용하여 분류기 모델을 학습시킵니다.

컨볼 루션 레이어와 더 복잡한 아키텍처가 런타임에 어떤 영향을 미치는지 살펴 보겠습니다.

이미지 4 — CIFAR-10 모델 평균 교육 시간 (작성자 별 이미지)

보시다시피 Colab의 CPU 환경은 GPU 및 M1 환경에 가깝지 않습니다.Colab GPU 환경은 이전 두 테스트와 유사하게 Apple의 M1보다 약 2 배 더 빠릅니다.

결론

저는 새로운 M1 칩의 모든 부분과 함께 제공되는 모든 것을 좋아합니다. 더 나은 성능, 과열 없음, 더 나은 배터리 수명.그래도 딥 러닝에 관심이 있다면 추천하기 어려운 노트북입니다.

물론, 다른 Intel 기반 Mac보다 M1이 약 2 배 향상되었지만 여전히 딥 러닝을 위해 만들어진 기계는 아닙니다.오해하지 마세요. 기본적인 딥 러닝 작업에 MBP를 사용할 수 있지만 매일 딥 러닝을 수행한다면 동일한 가격대에 더 나은 머신이 있습니다.

이 기사에서는 단순한 데이터 세트에 대한 딥 러닝 만 다루었습니다.다음은 M1 칩과 Colab을 비교하여 전이 학습과 같은 더 까다로운 작업을 수행합니다.

읽어 주셔서 감사합니다.

LinkedIn에서 연결하세요.

원래 게시 된 위치https://www.betterdatascience.com2021 년 1 월 25 일.

Create your first REST API in FastAPI -번역

FastAPI에서 첫 번째 REST API 만들기

Python에서 고성능 API를 만드는 단계별 가이드

Photo by on

이 포스트에서는FastAPI: Rest API를 생성하기위한 Python 기반 프레임 워크입니다.이 프레임 워크의 몇 가지 기본 기능을 간략하게 소개 한 다음 연락처 관리 시스템을위한 간단한 API 세트를 만들겠습니다.이 프레임 워크를 사용하려면 Python에 대한 지식이 매우 필요합니다.

FastAPI 프레임 워크를 논의하기 전에 REST 자체에 대해 조금 이야기 해 보겠습니다.

Wikipedia에서 :

REST (Representational State Transfer)웹 서비스를 만드는 데 사용할 제약 조건 집합을 정의하는 소프트웨어 아키텍처 스타일입니다.RESTful 웹 서비스라고하는 REST 아키텍처 스타일을 따르는 웹 서비스는 인터넷에서 컴퓨터 시스템 간의 상호 운용성을 제공합니다.RESTful 웹 서비스를 사용하면 요청 시스템이 일관되고 사전 정의 된 상태 비 저장 작업 집합을 사용하여 웹 리소스의 텍스트 표현에 액세스하고 조작 할 수 있습니다.SOAP 웹 서비스와 같은 다른 종류의 웹 서비스는 자체 임의의 작업 집합을 노출합니다. [1]

FastAPI 프레임 워크 란 무엇입니까?

공식에서:

FastAPI는 표준 Python 유형 힌트를 기반으로 Python 3.6 이상으로 API를 빌드하기위한 최신의 빠른 (고성능) 웹 프레임 워크입니다.

네, 그렇습니다,d 그것은의 상자 지원 때문입니다비동기의 특징Python 3.6 이상이것이 최신 버전의 Python을 사용하는 것이 권장되는 이유입니다.

Image for post

FastAPI는Flask 및 DRF와 같은 기존 프레임 워크에 만족하지 않았습니다.더 많은 것을 배울 수 있습니다.웹 사이트에 언급 된 주요 기능 중 일부는 다음과 같습니다.

  • 빠른: 매우 높은 성능, 동급NodeJS가다(Starlette와 Pydantic에게 감사드립니다)..
  • 빠른 코딩: 기능 개발 속도를 약 200 % ~ 300 % 증가시킵니다.*
  • 버그 감소: 인간 (개발자)이 유발하는 오류를 약 40 % 감소시킵니다.*
  • 직관적: 훌륭한 편집기 지원.어디에서나 완성.디버깅 시간 단축.
  • 쉬운: 사용하고 배우기 쉽도록 설계되었습니다.문서를 읽는 시간이 줄어 듭니다.
  • 짧은: 코드 중복을 최소화합니다.각 매개 변수 선언의 여러 기능.더 적은 버그.
  • 건장한: 프로덕션 준비 코드를 가져옵니다.자동 대화 형 문서.
  • 표준 기반: API (Open API)에 대한 개방형 표준 기반 (완전히 호환 가능)

FastAPI의 제작자는 거인의 어깨에 서서 다음과 같은 기존 도구와 프레임 워크를 사용했다고 믿었습니다.

Installation and Setup

나는 사용할거야API 개발 환경을 설정합니다.Pipenv를 사용하면 컴퓨터에 설치된 항목에 관계없이 개발 환경을 쉽게 격리 할 수 있습니다.또한 컴퓨터에 설치된 것과 다른 Python 버전을 선택할 수 있습니다.그것은 사용합니다Pipfile모든 프로젝트 관련 종속성을 관리합니다.여기서 Pipenv를 자세히 다루지 않을 것이므로 프로젝트에 필요한 명령 만 사용합니다.

다음을 실행하여 PyPy를 통해 Pipenv를 설치할 수 있습니다.pip 설치 pipenv

pipenv 설치 --python 3.9

설치가 완료되면 다음 명령을 실행하여 가상 환경을 활성화 할 수 있습니다.pipenv 쉘

Image for post

당신은 또한 실행할 수 있습니다pipenv 설치 --three여기서 3은 Python 3.x를 의미합니다.

설치가 완료되면 다음 명령을 실행하여 가상 환경을 활성화 할 수 있습니다.pipenv 쉘

먼저FastAPI다음 명령을 실행합니다.pipenv 설치 fastapi

Image for post

그것은pipenv, 핍이 아닙니다.쉘에 들어가면 다음을 사용할 것입니다.pipenv.기본적으로 pip를 사용하고 있지만 모든 항목은Pipfile.그만큼Pipfile아래와 같이 보일 것입니다.

이제 개발 환경을 설정했습니다.이제 첫 번째 API 엔드 포인트 작성을 시작할 때입니다.다음과 같은 파일을 생성하겠습니다.main.py.이것이 우리 앱의 진입 점이 될 것입니다.

fastapi에서 가져 오기 FastAPI앱 = FastAPI ().가져 오기("/")
def home () :
return { "Hello": "FastAPI"}

Flask에서 작업 한 적이 있다면 거의 비슷할 것입니다.필요한 라이브러리를 가져온 후인스턴스를 만들고 데코레이터로 첫 번째 경로를 만들었습니다.

이제 어떻게 실행하는지 궁금합니다.음, FastAPI는ASGI 서버입니다.당신은 단순히 명령을 실행합니다uvicorn main : app --reload

파일 이름 (본관이 경우 .py) 및 클래스 객체 (이 경우) 서버를 시작합니다.나는-재 장전변경 될 때마다 자동으로 다시로드되도록 플래그를 지정합니다.

Image for post

방문http://localhost:8000/JSON 형식으로 메시지가 표시됩니다.{ "Hello": "FastAPI"}

멋지죠?

FastAPI는 API 문서 엔진도 제공합니다.방문하면http://localhost:8000/docsSwagger UI 인터페이스를 사용하고 있습니다.

Image for post

또는 멋진 것이 필요하면 방문하십시오

Image for post

FastAPI는 다음과 같은 API 엔드 포인트의 OpenAPI 버전도 제공합니다.

Path and Parameters

앞으로 나아 갑시다.다른 API 엔드 포인트를 추가합니다.ID로 연락처 세부 정보를 가져 오는 것입니다.

.get ( "/ contact / {contact_id}")
def contact_details (contact_id : int) :
{ 'contact_id': contact_id} 반환

여기에 방법이 있습니다.contact_details그것은 단지 받아들입니다int매개 변수를 그대로 반환합니다.dict체재.이제 다음을 통해 액세스 할 때곱슬 곱슬하다다음과 같습니다.

Image for post

이제 정수 대신 문자열을 전달하면 어떻게 될까요?아래 내용이 표시됩니다.

Image for post

당신은 그것을 볼 않았다?잘못된 데이터 유형을 보냈다는 오류 메시지를 리턴했습니다.그런 사소한 일에 대해서는 유효성 검사기를 작성할 필요가 없습니다.그것이 일하는 동안의 아름다움입니다FaastAPI.

쿼리 문자열

쿼리 문자열 형태로 추가 데이터를 전달하면 어떻게됩니까?예를 들어 API 끝점은 많은 레코드를 반환하므로 페이지 매김이 필요합니다.음, 문제 없습니다. 해당 정보도 가져올 수 있습니다.

먼저선택 과목유형:

import 입력에서

.get("/contact/{contact_id}")
def contact_details(contact_id: int, page: Optional[int] = 1):
if page:
return {'contact_id': contact_id, 'page': page}
return {'contact_id': contact_id}

여기에서 다른 매개 변수를 전달했습니다.페이지유형을 설정선택 사항 [int]여기.선택 사항이며 이름에서 알 수 있습니다.선택 과목매개 변수.유형 설정int정수 값만 받아들이도록하는 것입니다. 그렇지 않으면 위에서했던 것처럼 오류가 발생합니다.

URL에 액세스http://127.0.0.1:8000/contact/1?page=5다음과 같은 내용이 표시됩니다.

Image for post

멋지죠?

지금까지 우리는 수동으로dict.시원하지 않습니다.단일 값을 입력하고 YUUGE JSON 구조를 반환하는 것은 매우 일반적입니다.FastAPI는이를 처리하는 우아한 방법을 제공합니다..

Pydantic모델은 실제로 데이터 유효성 검사에 도움이됩니다. 그게 무슨 뜻입니까?전달되는 데이터가 유효한지 확인하고 그렇지 않으면 오류를 반환합니다.우리는 이미 Python의 유형 힌트를 사용하고 있으며 이러한 데이터 모델은 삭제 된 데이터가 통과되도록합니다.약간의 코드를 작성해 봅시다.이 목적을 위해 연락처 API를 다시 확장하겠습니다.

import 입력에서fastapi에서 가져 오기 FastAPI
pydantic import BaseModel에서
앱 = FastAPI ()
클래스 Contact (BaseModel) :
contact_id : int
first_name : str
last_name : str
user_name : str
암호 : str
.post ( '/ 연락처')
async def create_contact (연락처 : 연락처) :
반환 연락처

나는 수입했다BaseModelpydantic의 클래스.그 후, 저는BaseModel클래스에 3 개의 필드를 설정합니다.나는 또한 그것의 유형을 설정하고 있음을 주목하십시오.완료되면우편API 끝점 및접촉그것에 매개 변수.나는 또한 사용하고 있습니다비동기여기에 간단한 파이썬 함수를코 루틴.FastAPI는 즉시 지원합니다.

이동http://localhost:8080/docs다음과 같은 내용이 표시됩니다.

Image for post

CURL 명령을 실행하면 다음과 같은 내용이 표시됩니다.

Image for post

예상대로 방금 반환접촉JSON 형식의 개체.

아시다시피 암호를 포함하여 전체 모델을 JSON 형식으로 덤프합니다.암호가 일반 텍스트 형식이 아니더라도 의미가 없습니다.그래서 뭐 할까?답입니다.

응답 모델이란?

이름에서 알 수 있듯이응답 모델요청에 대한 응답을 보내는 동안 사용되는 모델입니다.기본적으로 방금 모델을 사용하면 모든 필드를 반환합니다.응답 모델을 사용하여 사용자에게 반환 할 데이터의 종류를 제어 할 수 있습니다.코드를 약간 변경해 보겠습니다.

클래스 Contact (BaseModel) :
contact_id : int
first_name : str
last_name : str
user_name : str
암호 : str
ContactOut (BaseModel) 클래스 :
contact_id : int
first_name : str
last_name : str
user_name : str
.가져 오기("/")
def home () :
return { "Hello": "FastAPI"}
.post ( '/ contact', response_model = ContactOut)
async def create_contact (연락처 : 연락처) :
반환 연락처

다른 수업을 추가했습니다.ContactOut거의 사본입니다접촉수업.여기서 다른 점은암호들.그것을 사용하기 위해, 우리는 그것을response_model매개 변수우편데코레이터.그게 다야.이제 동일한 URL을 실행하면 암호 필드가 반환되지 않습니다.

Image for post

보시다시피 여기에는 비밀번호 필드가 표시되지 않습니다.눈치 채면/ docsURL도 볼 수 있습니다.

Image for post

여러 방법으로 사용하려는 경우 다른 응답 모델을 사용하는 것이 가능하지만 단일 방법에서 기밀 정보를 생략하려는 경우에는 다음을 사용할 수도 있습니다.response_model_exclude데코레이터의 매개 변수.

.post ( '/ contact', response_model = 연락처, response_model_exclude = { "password"})
async def create_contact (연락처 : 연락처) :
반환 연락처

출력은 비슷합니다.당신은response_modelresponse_model_exclude여기.결과는 동일합니다.API 엔드 포인트에 메타 데이터를 연결할 수도 있습니다.

.post ( '/ contact', response_model = 연락처, response_model_exclude = { "password"}, description = "단일 연락처 만들기")
async def create_contact (연락처 : 연락처) :
반환 연락처

문서에서 볼 수있는이 엔드 포인트에 대한 설명을 추가했습니다.

Image for post

FastAPI 문서의 우수성은 여기서 끝나지 않으며 모델의 예제 JSON 구조를 설정할 수도 있습니다.

클래스 Contact (BaseModel) :
contact_id : int
first_name : str
last_name : str
user_name : str
암호 : str
클래스 구성 :
schema_extra = {
"예": {
"contact_id": 1,
"first_name": "존",
"last_name": "미상",
"user_name": "jhon_123",
}
}

그렇게하면 다음과 같이 렌더링됩니다.

Image for post

FastAPI에서 오류 처리

필요한 정보를 얻지 못할 수도 있습니다.FastAPI는HTTPException그러한 상황을 다루는 수업.

.get ( "/ contact / {id}", response_model = Contact, response_model_exclude = { "password"}, description = "단일 연락처 가져 오기")
async def contact_details (id : int) :
ID & lt;1:
HTTPException (status_code = 404, detail = "필요한 연락처 정보를 찾을 수 없음")
연락처 = 연락처 (contact_id = id, first_name = 'Adnan', last_name = 'Siddiqi', user_name = 'adnan1', password = 'adn34')
반환 연락처

A simple endpoint. It returns contact details based on the id. If the 신분증1보다 작 으면 a를 반환합니다.404세부 사항이있는 오류 메시지.

떠나기 전에 사용자 지정 헤더를 보내는 방법을 알려 드리겠습니다.

fastapi에서 가져 오기 FastAPI, HTTPException, 응답.get ( "/ contact / {id}", response_model = 연락처, response_model_exclude = { "password"},
description = "단일 연락처 가져 오기")
async def contact_details (id : int, response : Response) :
response.headers["X-LOL"] = "1"
ID & lt;1:
HTTPException (status_code = 404, detail = "필요한 연락처 정보를 찾을 수 없음")
연락처 = 연락처 (contact_id = id, first_name = 'Adnan', last_name = 'Siddiqi', user_name = 'adnan1', password = 'adn34')
반환 연락처

가져온 후Response내가 통과 한 수업의뢰유형의 매개 변수의뢰헤더를 설정X-LOL

After running the curl command you will see something like the below:

Image for post

You can find x-lol헤더 중.LOL!

Conclusion

따라서이 게시물에서는 고성능 API를 빌드하기 위해 FastAPI를 사용하는 방법을 배웠습니다.우리는 이미 Flask라는 최소한의 프레임 워크를 가지고 있지만 FastAPI의 비동기 지원은 REST API를 통해 액세스되는 기계 학습 모델과 같은 최신 프로덕션 시스템에 매우 매력적입니다.나는 그 표면을 긁었다.자세한 내용은웹 사이트.

다음 포스트에서는 DB와의 통합, 인증 등과 같은 몇 가지 고급 주제에 대해 논의 할 것입니다.

Originally published at on January 23, 2021.

Modern Recommender Systems -번역

최신 추천 시스템

Facebook 및 Google과 같은 회사가 비즈니스를 구축 한 AI 알고리즘에 대해 자세히 알아보십시오.

최근 2019 년 5 월에 Facebook은 몇 가지 추천 접근 방식을 오픈 소스로 제공하고DLRM(딥 러닝 추천 모델).이 블로그 게시물은 DLRM 및 기타 최신 추천 접근 방식이 도메인의 이전 결과에서 파생 될 수있는 방법을 살펴보고 내부 작동 및 직관을 자세히 설명함으로써 어떻게 그리고 왜 잘 작동하는지 설명하기위한 것입니다.

맞춤형 AI 기반 광고는 요즘 온라인 마케팅에서 게임의 이름은 Facebook, Google, Amazon, Netflix 및 co와 같은 회사가 온라인 마케팅 정글의 왕입니다. 왜냐하면 이러한 추세를 채택했을뿐만 아니라 본질적으로이를 발명하고 전체 비즈니스 전략을 구축했기 때문입니다.그것.넷플릭스의“즐길 수있는 다른 영화”나 아마존의“이 상품을 구매 한 고객도 구매했습니다…”는 온라인 세상에서 많은 예입니다.

자연스럽게, 저는 일상적인 Facebook과 Gooogle 사용자로서 어느 시점에서 스스로에게 물었습니다.

“이게 정확히 어떻게 작동합니까?”

예, 우리 모두는 협업 필터링 / 행렬 분해가 작동하는 방식을 설명하는 기본적인 영화 추천 예제를 알고 있습니다.또한, 사용자가 특정 제품을 좋아하는지 여부에 대한 확률을 출력하는 간단한 분류기를 사용자별로 훈련시키는 접근 방식에 대해 말하는 것이 아닙니다.이 두 가지 접근 방식, 즉 협업 필터링과 콘텐츠 기반 추천은 사용할 수있는 성능과 예측을 산출해야하지만 Google, Facebook 및 Co는 확실히 더 나은 것을 가져야합니다. 그렇지 않으면 어디에 있지 않을 것입니다.그들은 오늘입니다.

오늘날의 고급 추천 시스템의 출처를 이해하려면 문제에 대한 두 가지 기본 접근 방식을 살펴보아야합니다.

특정 사용자가 특정 항목을 얼마나 좋아하는지 예측합니다.

온라인 마케팅 세계에서는 평점, 좋아요 등과 같은 명시적인 피드백과 클릭, 검색 기록, 댓글 또는 같은 암시 적 피드백을 기반으로 가능한 광고의 클릭률 (CTR)을 예측하는 데 추가됩니다.웹 사이트 방문.

콘텐츠 기반 필터링과협업필터링

1. 콘텐츠 기반 필터링

느슨하게 말한 콘텐츠 기반 추천은 사용자의 온라인 기록을 사용하여 사용자가 특정 제품을 좋아하는지 여부를 예측하는 것을 의미합니다.여기에는 사용자가 제공 한 좋아요 (예 : Facebook), 검색 한 키워드 (예 : Google), 단순히 특정 웹 사이트를 클릭하고 방문한 횟수가 포함됩니다.대체로 사용자의 선호도에 초점을 맞 춥니 다.예를 들어이 사용자의 특정 광고 그룹에 대한 클릭률 (또는 등급)을 출력하는 간단한 이진 분류기 (또는 회귀 자)를 생각할 수 있습니다.

2. 협업 필터링

그러나 협업 필터링은 유사한 사용자의 선호도를 조사하여 사용자가 특정 제품을 좋아할지 여부를 예측하려고합니다.여기에서 등급 매트릭스가 사용자와 영화에 대한 하나의 임베딩 매트릭스로 분해되는 영화 추천에 대한 표준 매트릭스 분해 (MF) 접근 방식을 생각할 수 있습니다.

클래식 MF의 단점은 예를 들어 어떤 부가 기능도 사용할 수 없다는 것입니다.영화 장르, 개봉일 등 MF 자체는 기존의 상호 작용을 통해 배워야합니다.또한 MF는 아직 누구에게도 평가되지 않은 신작은 추천 할 수없는 이른바 ‘콜드 스타트 문제’에 시달리고있다.콘텐츠 기반 필터링은 이러한 두 가지 문제를 해결하지만 유사한 사용자의 선호도를 볼 수있는 예측 능력이 부족합니다.

두 가지 다른 접근 방식의 장점과 단점은 두 아이디어가 어떻게 든 하나의 모델로 결합되는 하이브리드 접근 방식의 필요성을 매우 분명하게 나타냅니다.

하이브리드 추천 모델

1. 분해 기계

2010 년 Steffen Rendle이 소개 한 아이디어 중 하나는분해 기계.행렬 분해와 회귀를 결합하는 기본적인 수학적 접근 방식을 보유합니다.

Image for post

학습 중에 추정해야하는 모델 매개 변수는 다음과 같습니다.

Image for post

⟨∙, ∙⟩은 V에서 행으로 볼 수있는 ℝᵏ 크기의 vᵢ와 vⱼ 두 벡터 사이의 내적입니다.

이 모델에 던져지는 데이터 x를 표현하는 방법의 예를 볼 때이 방정식이 어떻게 의미가 있는지 보는 것은 매우 간단합니다.Steffen Rendle의 Factorization Machines에 대한 백서에 설명 된 예제를 살펴 보겠습니다.

사용자가 특정 시간에 영화에 등급을 부여하는 영화 리뷰에 다음과 같은 거래 데이터가 있다고 상상해보십시오.

  • user u ∈ U = {Alice (A), Bob (B), . . .}
  • movie (item) i ∈ I = {Titanic (TI), Notting Hill (NH), Star Wars (SW), Star Trek (ST), . . .}
  • rating r ∈ {1,2,3,4,5} at time t ∈ ℝ
Image for post

Fig.1, S. Rendle — 2010 IEEE International Conference on Data Mining, 2010- “Factorization Machines”

위의 그림을 보면 하이브리드 추천 모델에 대한 데이터 설정을 볼 수 있습니다.사용자와 항목을 나타내는 희소 특성과 추가 메타 또는 부가 정보 (예 :이 예에서 “시간”또는 “최근 영화 등급”)는 모두 대상 y에 매핑되는 특성 벡터 x의 일부입니다.이제 핵심은 모델에 의해 처리되는 방법입니다.

  • FM의 회귀 부분은 표준 회귀 작업과 같이 희소 데이터 (예 : “사용자”)와 고밀도 데이터 (예 : “시간”)를 모두 처리하므로 FM 내에서 콘텐츠 기반 필터링 접근 방식으로 해석 될 수 있습니다.
  • FM의 MF 부분은 이제 기능 블록 간의 상호 작용 (예 : “사용자”와 “영화”간의 상호 작용)을 설명합니다. 여기서 행렬 V는 협업 필터링 접근 방식에 사용되는 임베딩 행렬로 해석 될 수 있습니다.이러한 교차 사용자 영화 관계는 다음과 같은 통찰력을 제공합니다.

vⱼ를 포함하는 다른 사용자 j와 유사한 임베딩 vᵢ (영화 속성에 대한 선호도를 나타냄)를 가진 사용자 i는 사용자 j와 유사한 영화를 매우 좋아할 수 있습니다.

회귀 부분과 MF 부분에 대한 두 가지 예측을 함께 추가하고 하나의 비용 함수에서 매개 변수를 동시에 학습하면 이제 사용자를위한 권장 사항을 만들기 위해 “양쪽 세계의 최고”접근 방식을 사용하는 하이브리드 FM 모델이 생성됩니다.

언뜻보기에 Factorization Machine의이 하이브리드 접근 방식은 이미 NLP 또는 컴퓨터 비전과 같은 많은 다른 AI 분야가 과거에 입증 되었 듯이 완벽한 “양쪽 세계의 최고”모델 인 것처럼 보입니다.

“신경망에 던져 넣으면 더 나아질 것입니다.”

2. 넓고 깊은 NCF (Neural Collaborative Filtering) 및 DeepFM (Deep Factorization Machine)

먼저 NCF 논문을 살펴봄으로써 신경망 접근 방식으로 협업 필터링을 어떻게 해결할 수 있는지 살펴볼 것입니다. 이는 분해 기계의 신경망 버전 인 Deep Factorization Machines (DeepFM)로 이어질 것입니다.왜 그들이 일반 FM보다 우월하고 신경망 아키텍처를 해석 할 수 있는지 알아볼 것입니다.추천 시스템에서 딥 러닝의 첫 번째 주요 혁신 중 하나 인 Google에서 이전에 출시 한 Wide & amp; Deep 모델을 개선하여 DeepFM이 어떻게 개발되었는지 살펴 보겠습니다.이것은 마침내 우리를 DeepFM에 대한 단순화 및 약간의 조정으로 볼 수있는 2019 년 Facebook에서 발표 한 앞서 언급 한 DLRM 문서로 이어질 것입니다.

NCF

2017 년에 연구원 그룹은작업신경 협업 필터링에 대해.여기에는 신경망을 사용한 협업 필터링에서 행렬 분해에 의해 모델링 된 기능적 관계를 학습하기위한 일반화 된 프레임 워크가 포함되어 있습니다.저자는 또한 고차 상호 작용을 달성하는 방법 (MF는 차수 2에 불과 함)과 두 접근 방식을 결합하는 방법을 설명했습니다.

일반적인 아이디어는 신경망이 (이론적으로) 모든 기능적 관계를 배울 수 있다는 것입니다.즉, 협업 필터링 모델이 표현하는 MF와의 관계도 신경망으로 학습 할 수 있습니다.NCF는 기본적으로 신경망을 통해 두 임베딩 간의 MF 내적 관계를 학습하기 위해 사용자와 항목 (표준 MF와 유사) 모두에 대한 간단한 임베딩 계층을 제안한 다음 간단한 다층 퍼셉트론 신경망이 뒤 따릅니다.

Image for post

그림 2. X He, L Liao, H Zhang, L Nie, X Hu, TS Chua의“Neural Collaborative Filtering”에서 발췌 한 제 26 차 월드 와이드 웹 국제 컨퍼런스, 2017 년

이 접근 방식의 장점은 MLP의 비선형성에 있습니다.MF에서 사용되는 간단한 내적은 항상 2 차 학습 상호 작용으로 모델을 제한하는 반면, X 레이어가있는 신경망은 이론적으로 훨씬 더 높은 수준의 상호 작용을 학습 할 수 있습니다.예를 들어 남성, 십대 및 RPG 컴퓨터 게임과 같이 상호 작용이있는 세 가지 범주 적 기능을 생각해보십시오.

실제 문제에서 우리는 임베딩에 대한 원시 입력으로 사용자 및 항목 이진화 된 벡터를 사용하는 것이 아니라 가치있을 수있는 다양한 기타 메타 또는 부가 정보 (예 : 연령, 국가, 오디오 / 텍스트 녹음, 타임 스탬프)를 분명히 포함합니다.,…) 그래서 실제로 우리는 매우 고차원적이고 매우 희소하며 연속적인 카테고리 혼합 데이터 세트를 가지고 있습니다.이 시점에서, 위에서 제시된 그림 2의 신경망은 단순한 이진 분류 피드-포워드 신경망의 형태로 콘텐츠 기반 추천으로 해석 될 수 있습니다.그리고이 해석은 CF와 콘텐츠 기반 추천 간의 하이브리드 접근 방식이되는 방식을 이해하는 데 중요합니다.네트워크는 실제로 모든 기능적 관계를 학습 할 수 있으므로 CF 차원의 3 차 이상의 상호 작용 (예 :x₁ ∙ x₂ ∙ x₃ 또는 σ (… σ (w₁x₁ + w₂x₂ + w₃x₃ + b)) 형식의 고전적인 신경망 분류 의미의 비선형 변환을 여기서 배울 수 있습니다.

고차 상호 작용을 학습하는 힘을 갖추고 있으므로 신경망을 저차 학습으로 잘 알려진 모델과 결합하여 모델이 차수 1과 2의 저차 상호 작용도 쉽게 학습 할 수 있도록 만들 수 있습니다.상호 작용, Factorization Machine.이것이 DeepFM의 저자가 논문에서 제안한 내용입니다.고차 및 저차 기능 상호 작용을 동시에 학습하기위한이 조합 아이디어는 많은 최신 추천 시스템의 핵심 부분이며 업계에서 제안 된 거의 모든 네트워크 아키텍처에서 어떤 형태로든 찾을 수 있습니다.

DeepFM

DeepFM은 FM과 심층 신경망 간의 혼합 접근 방식으로, 둘 다 동일한 입력 임베딩 레이어를 공유합니다.원시 기능은 연속 필드가 자체적으로 표현되고 범주 형 필드가 원-핫 인코딩되도록 변환됩니다.NN의 마지막 레이어에서 제공하는 최종 (예 : CTR) 예측은 다음과 같이 정의됩니다.

Image for post

이것은 두 네트워크 구성 요소 인 FM 구성 요소와 Deep 구성 요소의 시그 모이 드 활성화 합계입니다.

그만큼FM 성분신경망 아키텍처 스타일로 꾸민 일반 Factorization Machine입니다.

Image for post

그림 2. Huifeng Guo, Ruiming Tang, Yunming Ye, Zhenguo Li, Xiuqiang He.DeepFM : CTR 예측을위한 인수 분해 기계 기반 신경망.arXiv 사전 인쇄 arXiv : 1703.04247, 2017.

FM 레이어의 덧셈 부분은 원시 입력 벡터 x를 직접 가져 와서 (Sparse Features Layer) 각 요소에 가중치를 곱한 다음 ( “Normal Connection”) 합산합니다.FM 레이어의 Inner Product 부분도 원시 입력 x를 가져 오지만, 임베딩 레이어를 통과 한 후에 만 임베딩 벡터 사이에 가중치 (“Weight-1 Connection”)없이 내적을 취합니다.다른 “Weight-1 연결”을 통해 두 부분을 함께 추가하면 앞서 언급 한 FM 방정식이 생성됩니다.

Image for post

이 방정식에서 xᵢxⱼ 곱셈은 i = 1에서 n까지의 합을 쓸 수있을 때만 필요합니다.실제로 신경망 계산의 일부가 아닙니다.네트워크는 임베딩 레이어 아키텍처로 인해 내적을 취하기 위해 어떤 임베딩 벡터 vᵢ, vⱼ를 자동으로 인식합니다.

이 임베딩 레이어 아키텍처는 다음과 같습니다.

Image for post

그림 4. Huifeng Guo, Ruiming Tang, Yunming Ye, Zhenguo Li, Xiuqiang He.DeepFM : CTR 예측을위한 인수 분해 기계 기반 신경망.arXiv 사전 인쇄 arXiv : 1703.04247, 2017.

Vᵖ는 k 개의 열이있는 각 필드 p = {1,…, m}에 대한 임베딩 행렬이지만 필드의 이진화 된 버전에는 요소가 있습니다.따라서 임베딩 레이어의 출력은 다음과 같이 제공됩니다.

Image for post

이것은 완전히 연결된 레이어가 아닙니다. 즉, 필드의 원시 입력과 다른 필드의 임베딩간에 연결이 없다는 점에 유의해야합니다.이렇게 생각해보십시오. 성별에 대한 원-핫 인코딩 벡터 (예 : (0,1))는 평일의 임베딩 벡터와 관련이 없습니다 (예 : (0,1,0,0,0,0,0))원시 이진화 된 평일 “화요일”이며 예를 들어 k = 4; (12,4,5,9))와 함께 벡터를 임베딩합니다.

Factorization Machine 인 FM 구성 요소는 차수 1 및 차수 2 상호 작용의 높은 중요성을 반영하며, 이는 Deep 구성 요소 출력에 직접 추가되고 최종 레이어의 시그 모이 드 활성화에 공급됩니다.

그만큼깊은 구성 요소이론상 모든 심층 신경망 아키텍처로 제안됩니다.저자는 특히 일반적인 피드 포워드 MLP 신경망 (소위 PNN)을 살펴 보았습니다.일반 MLP는 다음 그림에 나와 있습니다.

Image for post

그림 3. Huifeng Guo, Ruiming Tang, Yunming Ye, Zhenguo Li, Xiuqiang He.DeepFM : CTR 예측을위한 인수 분해 기계 기반 신경망.arXiv 사전 인쇄 arXiv : 1703.04247, 2017.

원시 데이터 (원-핫 인코딩 된 범주 입력으로 인해 매우 희소)와 다음과 같은 신경망 계층 사이에 임베딩 계층이있는 표준 MLP 네트워크 :

Image for post

σ는 활성화 함수, W는 가중치 행렬, a는 이전 계층의 활성화, b는 편향입니다.

이를 통해 전반적인 DeepFM 네트워크 아키텍처가 생성됩니다.

Image for post

매개 변수와 함께 :

  • 특성 i와 다른 특성 (임베딩 레이어) 간의 상호 작용의 영향을 측정하기위한 잠재 벡터 Vᵢ
  • Vᵢ은 FM 구성 요소로 전달되어 주문 2 상호 작용 (FM 구성 요소)을 모델링합니다.
  • 원시 특성 i (FM 구성 요소)의 순서 1 중요성에 가중치 부여
  • Vᵢ는 또한 모든 고차 상호 작용을 모델링하기 위해 Deep 구성 요소로 전달됩니다 (& gt; 2) (Deep 구성 요소).
  • Wˡ 및 bˡ, 신경망 가중치 및 편향 (Deep Component)

고차 및 저차 상호 작용을 동시에 얻는 열쇠는 특히 FM과 Deep 구성 요소 모두에 대해 동일한 임베딩 레이어를 사용하여 하나의 비용 함수로 모든 매개 변수를 동시에 훈련하는 것입니다.

Wide & amp; Deep 및 NeuMF와 비교

이 아키텍처를 잠재적으로 더 좋게 만드는 방법에 대해 상상할 수있는 많은 변형이 있습니다.그러나 핵심은 고차 및 저차 상호 작용을 동시에 모델링하는 방법에 대한 하이브리드 접근 방식에서 모두 유사합니다.DeepFM의 저자는 또한 MLP 부분을 내장 계층과 결합 된 초기 입력으로 FM 계층을 가져 오는 심층 신경망 인 소위 PNN과 교환 할 것을 제안했습니다.

NCF 논문의 저자는 또한 NeuMF ( “Neural Matrix Factorization”)라고하는 유사한 아키텍처를 내놓았습니다.FM을 하위 구성 요소로 사용하는 대신 활성화 함수에 공급되는 정규 행렬 분해를 사용했습니다.그러나이 접근 방식에는 FM의 선형 부분에 의해 모델링 된 특정 순서 1 상호 작용이 없습니다.또한 저자는 MLP 부분뿐만 아니라 행렬 분해에 대해 모델이 다른 사용자 및 항목 임베딩을 학습 할 수 있도록 특별히 허용했습니다.

앞서 언급했듯이 Google의 연구팀은 하이브리드 추천 접근 방식을위한 신경망을 최초로 제안한 팀 중 하나였습니다.DeepFM은 다음과 같은 Google의 Wide & amp; Deep 알고리즘의 추가 개발이라고 생각할 수 있습니다.

Image for post

그림 1 : Heng-Tze Cheng, Levent Koc, Jeremiah Harmsen, Tal Shaked, Tushar Chandra, Hrishi Aradhye, Glen Anderson, Greg Corrado, Wei Chai, Mustafa Ispir, Rohan Anil, Zakaria Haque, Lichan Hong, Vihan Jain, Xiaobing Liu, 그리고 Hemal Shah.와이드 & amp;추천 시스템을위한 딥 러닝.Proc.추천 시스템을위한 딥 러닝에 대한 1 차 워크숍, 7-10 페이지, 2016.

오른쪽은 임베딩 레이어가있는 잘 알려진 MLP이지만 왼쪽에는 최종 전체 출력 장치에 직접 공급되는 다른 수동 엔지니어링 입력이 있습니다.내적 연산 형태의 저차 상호 작용은 이러한 수동 엔지니어링 기능에 숨겨져 있으며 저자는 다음과 같이 여러 가지가 될 수 있다고 말합니다.

Image for post

이것은 (xᵢ이 k 번째 변환의 일부인 경우 지수가 1과 같음) 서로 교차 곱하여 d 피처 (다른 이전 임베딩 포함 또는 제외) 간의 상호 작용을 캡처합니다.

DeepFM이 선험적 인 기능 엔지니어링이 필요하지 않고 하나의 공통 임베딩 레이어를 공유하는 정확히 동일한 입력 데이터에서 저차 및 고차 상호 작용을 학습 할 수 있기 때문에 얼마나 개선되었는지 쉽게 알 수 있습니다.DeepFM은 실제로 핵심 네트워크의 일부로 FM 모델을 가지고있는 반면 Wide & amp; Deep은 실제 신경망의 일부로 내적 계산을 수행하지 않고 기능 엔지니어링 단계에서 미리 수행합니다.

3. DLRM — 딥 러닝 추천 모델

따라서 Google, Huawei (DeepFM 아키텍처 관련 연구팀) 등의 다양한 옵션을 사용하여 Facebook이 사물을 보는 방식을 살펴 보겠습니다.그들은 이러한 모델의 실용적인 측면에 많은 초점을 맞춘 2019 년에 DLRM 논문을 발표했습니다.병렬 교육 설정, GPU 컴퓨팅 및 연속 기능과 범주 기능의 다양한 처리.

DLRM 아키텍처는 아래 그림에 설명되어 있으며 다음과 같이 작동합니다. 범주 형 기능은 각각 임베딩 벡터로 표시되는 반면 연속 기능은 임베딩 벡터와 동일한 길이를 갖도록 MLP에 의해 처리됩니다.이제 두 번째 단계에서는 임베딩 벡터와 처리 된 (MLP 출력) 고밀도 벡터의 모든 조합 사이의 내적이 계산됩니다.그 후, 내적은 조밀 한 특징의 MLP 출력과 연결되고 또 다른 MLP를 통과하여 마지막으로 확률을 제공하는 시그 모이 드 함수로 전달됩니다.

Image for post

에 설명 된 DLRM 네트워크DLRM.Max Beckers의 그림.

이 DLRM 제안은 임베딩 벡터 간의 내적 계산도 사용한다는 점에서 DeepFM의 단순화되고 수정 된 버전이지만 MLP 계층을 통해 임베딩 된 범주 형 기능을 직접 강제하지 않음으로써 고차 상호 작용에서 벗어나려고합니다..이 설계는 Factorization Machine이 임베딩 간의 2 차 상호 작용을 계산하는 방식을 모방하도록 조정되었습니다.전체 DLRM 설정을 FM 구성 요소 인 DeepFM의 특수한 부분으로 생각할 수 있습니다.DeepFM의 최종 레이어에서 FM 구성 요소의 결과에 추가 된 (그리고 시그 모이 드 함수에 공급되는) DeepFM의 고전적인 Deep Component는 DLRM 설정에서 완전히 생략 된 것으로 볼 수 있습니다.DeepFM의 이론적 이점은 설계 상 고차 상호 작용을 배우기 위해 더 잘 갖추어 졌기 때문에 분명하지만 Facebook에 따르면 다음과 같습니다.

“… 다른 네트워크에서 발견되는 2 차 이상의 고차 상호 작용은 반드시 추가 계산 / 메모리 비용의 가치가 없을 수 있습니다.”

4. 전망과 코딩

다양한 심층 추천 접근 방식, 그들의 직감, 장단점을 이론적으로 소개 한 후 제안 된 내용을 살펴 보았습니다.PyTorch 구현Facebook의 GitHub 페이지에서 DLRM의.

구현의 세부 사항을 확인하고 다양한 원시 데이터 세트를 직접 처리하기 위해 내장 된 사전 정의 된 데이터 세트 API를 사용해 보았습니다.둘 다Kaggle 디스플레이 광고 도전Criteo뿐만 아니라테라 바이트 데이터 세트사전 구현되고 다운로드 할 수 있으며 이후에 단 하나의 bash 명령으로 전체 DLRM을 훈련하는 데 사용할 수 있습니다 (지침은 DLRM repo 참조).그런 다음 Facebook의 DLRM 모델 API를 확장하여 다른 데이터 세트에 대한 전처리 및 데이터로드 단계를 포함합니다.2020 DIGIX 광고 CTR 예측.그것을 확인하시기 바랍니다여기.

digix 데이터를 다운로드하고 압축을 푼 후 비슷한 방식으로 이제 단일 bash 명령으로이 데이터에 대한 모델을 학습 할 수 있습니다.모든 전처리 단계, 임베딩의 모양 및 신경망 아키텍처 매개 변수는 digix 데이터 세트를 처리하도록 조정됩니다.명령을 안내하는 노트북을 찾을 수 있습니다.여기.digix 데이터 뒤에 숨겨진 원시 데이터와 광고 프로세스를 더 잘 이해하여 성능을 향상시키기 위해 계속 노력하고 있기 때문에 모델은 괜찮은 결과를 제공합니다.특정 데이터 정리, 하이퍼 파라미터 튜닝 및 기능 엔지니어링은 모두 제가 추가로 작업하고 싶은 작업이며공책.첫 번째 목표는 원시 digix 데이터를 입력으로 사용할 수있는 DLRM 모델 API의 기술적으로 건전한 확장을 갖는 것이 었습니다.

대체로 하이브리드 딥 모델은 추천 작업을 해결하는 가장 강력한 도구 중 하나라고 생각합니다.그러나 최근에 협업 필터링 문제를 해결하는 데있어 매우 흥미롭고 창의적인 감독되지 않은 접근 방식이 있습니다.오토 인코더.따라서이 시점에서 저는 오늘날 거대 인터넷 거대 기업이 우리가 클릭 할 가능성이 가장 높은 광고를 제공하기 위해 무엇을 사용하고 있는지 추측 할 수 있습니다.앞서 언급 한 오토 인코더 접근 방식과이 기사에 제시된 딥 하이브리드 모델의 일부 형태의 조합이 될 수 있다고 가정합니다.

참고 문헌

스테 펜 렌들.분해 기계.Proc.데이터 마이닝에 관한 2010 IEEE 국제 컨퍼런스, 페이지 995–1000, 2010.

Xiangnan He, Lizi Liao, Hanwang Zhang, Liqiang Nie, Xia Hu 및 Tat-Seng Chua.신경 협업 필터링.Proc.26th Int.Conf.World Wide Web, 페이지 173–182, 2017.

Huifeng Guo, Ruiming Tang, Yunming Ye, Zhenguo Li, Xiuqiang He.DeepFM : CTR 예측을위한 분해 기계 기반 신경망.arXiv 사전 인쇄 arXiv : 1703.04247, 2017.

Jianxun Lian, Xiaohuan Zhou, Fuzheng Zhang, Zhongxia Chen, Xing Xie 및 Guangzhong Sun.xDeepFM : 추천 시스템에 대한 명시 적 및 암시 적 기능 상호 작용 결합.Proc.제 24 회 ACM SIGKDD International Conference on Knowledge Discovery & amp;데이터 마이닝, 1754–1763 페이지.ACM, 2018 년.

Heng-Tze Cheng, Levent Koc, Jeremiah Harmsen, Tal Shaked, Tushar Chandra, Hrishi Aradhye, Glen Anderson, Greg Corrado, Wei Chai, Mustafa Ispir, Rohan Anil, Zakaria Haque, Lichan Hong, Vihan Jain, Xiaobing Liu 및 Hemal Shah.와이드 & amp;추천 시스템을위한 딥 러닝.Proc.추천 시스템을위한 딥 러닝에 대한 1 차 워크숍, 7-10 페이지, 2016.

M. Naumov, D. Mudigere, HM Shi, J. Huang, N. Sundaraman, J. Park, X. Wang, U. Gupta, C. Wu, AG Azzolini, D. Dzhulgakov, A. Mallevich, I. Cherniavskii,Y. Lu, R. Krishnamoorthi, A. Yu, V. Kondratenko, S. Pereira, X. Chen, W. Chen, V. Rao, B. Jia, L. Xiong, M. Smelyanskiy,“딥 러닝 추천 모델개인화 및 추천 시스템,”CoRR, vol.abs / 1906.00091, 2019. [온라인].유효한:http://arxiv.org/abs/1906.00091 [39]

A Zero-Maths Introduction to Bayesian Statistics -번역

베이지안 통계에 대한 제로 수학 소개

통계 세계의 십자군 해독 — 베이지안 대 빈도주의

이것은 많은 소개가 필요하지 않습니다.수천 개의 기사, 논문이 작성되었으며 베이지안 대 빈도주의에 대한 몇 가지 전쟁이 벌어졌습니다.내 경험상 대부분의 사람들은 일반적인 선형 회귀로 시작하여 더 복잡한 모델을 구축하기 위해 노력하고 소수만이 신성한 Bayes 풀에 발을 담그고 주제의 간결함과 함께 이러한 기회가 부족하여 구멍을 뚫습니다.이해에서 적어도 나에게는 그랬다.

Image for post

~의 사진클레이 뱅크스의 위에Unsplash

베이지안 프로세스에 대한 직관 구축

베이지안 분석에 대한 직관을 구축해 보겠습니다.나는 한 번 또는 다른 당신이 Frequentism과 Bayesian 사이의 논쟁에 빠졌을 것이라고 믿습니다.통계적 추론의 두 가지 접근 방식의 차이점을 설명 할 수있는 많은 문헌이 있습니다.

Image for post

Image for post

베이지안 접근 방식에는 사전 정보가 어떻게 포함됩니까?

Image for post

Image for post

여기까지왔다면 등을 가볍게 두 드리십시오!:)

출처 : Giphy.com

Moment of truth through an example

우리의 직관을 구축하기위한 몇 가지 간단한 예를 통해 위에서 배운 것을 이해할 수 있는지 봅시다.

Image for post

Non-Bayesian (Frequentist) = 균일 사전이있는 베이지안

Image for post

Uninformative prior gives the same results as the frequentist approach(Image by Author)
Image for post

베타 배포판으로 변경되기 전에 빈도 주의자보다 더 잘하고 있음을 알 수 있습니다. (Image by Author)
Image for post

베이지안 접근 방식의 결과가 빈도 주의자에 비해 현실 세계를 모방하도록하는 독단적 사전 (Image by Author)

코인에 대한 우리의 기존 지식은 결과에 큰 영향을 미쳤으며 이는 의미가 있습니다.그것은 우리가 동전에 대해 아는 것이없고이 20 가지 관찰이 복음이라고 가정하는 빈도 주의적 접근과 정반대입니다.

Conclusion

따라서 데이터가 부족함에도 불구하고 베이지안을 통해 모델에 초기 신념을 포함했을 때 거의 올바른 결론에 도달 할 수 있었던 방법을 알 수 있습니다.Bayes의 규칙은 Bayesian 통계의 직관 뒤에 있으며 (이러한 명백한 진술) 빈도주의에 대한 대안을 제공합니다.

베이지안이 모든 데이터 과학 문제를 해결하기위한 최선의 접근 방식이라는 의미는 아닙니다.이는 접근 방식 중 하나 일 뿐이며 이러한 사고 학파 간의 십자군 전쟁에 맞서기보다는 베이지안과 빈도주의 방법을 모두 배우는 것이 유익 할 것입니다.

출처 : Giphy