첫 강의: [AI 인공지능 머신러닝 딥러닝/Julia] - Julia 프로그래밍 - 언어 및 강의 소개
Julia 프로그래밍 - 언어 및 강의 소개
Julia 프로그래밍 언어줄리아(Julia)는 고성능의 수치 해석 및 계산과학의 필요 사항을 만족시키면서 일반 목적 프로그래밍에도 효과적으로 사용될 수 있도록 설계된 고급 동적 프로그래밍 언어이
inner-game.tistory.com
이전 강의: [AI 인공지능 머신러닝 딥러닝/머신러닝] - Julia 프로그래밍 - 머신 러닝을 위한 Julia
Julia 프로그래밍 - 머신 러닝을 위한 Julia
[AI 인공지능 머신러닝 딥러닝/Julia] - Julia 프로그래밍 - 언어 및 강의 소개 Julia 프로그래밍 - 언어 및 강의 소개Julia 프로그래밍 언어줄리아(Julia)는 고성능의 수치 해석 및 계산과학의 필요 사항
inner-game.tistory.com

머신 러닝을 위한 Julia
동기 부여Julia AD 생태계
속성
행렬에 대한 연결
구성
파생상품이란 무엇인가요?
미분가능성
야코비안
야코비안-벡터 곱
사슬 법칙
함수 구성
전방 축적
야코비안 계산
야코비안 계산
함수 구성
역축적
그래디언트 계산
-- JVP를 사용하여 그래디언트 계산
-- VJP를 사용하여 그래디언트 계산
규칙 기반 AD
체인룰즈.jl
-- 순방향 모드 AD 규칙
-- 역방향 모드 AD 규칙
-- 체인룰스코어.jl
코드 내성 ⁽⁺⁾
-- 깊이 1: AST 표현
-- 심도 2: 줄리아 IR
-- 심층 3: LLVM 표현
-- 깊이 4: 네이티브 코드
Zygote.jl
-- 주의 사항
Enzyme.jl
-- Low-level API
Finite differences
-- Caveats
-- FiniteDiff.jl 및 FiniteDifferences.jl
포워드디프.jl
DifferentiationInterface.jl
DifferentiationInterfaceTest.jl
다른 AD 패키지
확률 적 경사 하강법과 같은 경사 기반 최적화 방법을 신경망에 적용하려면 매개변수에 대한 손실 함수의 경사를 계산해야 합니다.
딥 러닝 모델은 크고 복잡해질 수 있으므로 임의의 함수를 취할 수 있는 기계가 있으면 좋을 것입니다.그리고 그 미분을 반환합니다 . 이를 자동 미분(AD)이라고 합니다.
참고: 이 강의에서는 여러 자동 미분 패키지를 소개합니다. 처음 로드하는 데 몇 분이 걸릴 수 있습니다.
Julia는 12개가 넘는 AD 시스템을 보유하고 있습니다. 사용 가능한 패키지 목록은 juliadiff.org 에서 확인할 수 있습니다 . 목록은 유형별로 정렬되어 있습니다.
1. 역방향 모드
2. 정방향 모드
3. 상징적인
4. 유한 차분
그리고 그 외에도 좀 더 이색적인 접근법들이 있습니다. 이미 추상적으로 들리는 용어들이지만, 이러한 범주 내에서도 다음과 같은 차이점들이 존재합니다.
AD 시스템 연산자는 오버로딩 방식 인가요 , 아니면 소스 간(source-to-source) 방식 인가요 ? 어떤 표현 수준에서 동작하나요? 스칼라 함수에서만 작동하나요? 고차 AD를 허용하나요 ?
여러분은 이러한 용어에 익숙하지 않을 수 있으므로, 이 강의의 목적은 다양한 AD 패키지 간의 접근 방식의 차이점을 설명하고 각각의 장단점을 개략적으로 설명하는 것입니다.
이러한 목적을 위해, 우리는 한 걸음 물러나서 선형 사상 과 미분이라는 두 가지 기본적인 수학 개념을 다시 살펴보겠습니다 .
선형 맵로 표현될 수 있습니다행렬.

예를 들어 많은 일반적인 기하학적 변환은 선형 맵입니다.변환행렬 표현각도별 회전투영에 대한-중심선반사를 통해-중심선스트레칭을 따라-중심선평행하게 전단-중심선압착 기초를 위해,.
구성 행렬 곱셈에 대한 연결구성두 개의 선형 맵,선형 맵이기도 합니다. 유한 차원 벡터 공간에서 선형 사상의 구성은 행렬 곱셈에 해당합니다.






















-- JVP를 사용하여 그래디언트 계산

-- VJP를 사용하여 그래디언트 계산




ChainRules.jl 은 다양한 기능에 대한 순방향 및 역방향 모드 AD 규칙을 구현하는 패키지로, 다운스트림 Julia AD 패키지가 모든 규칙을 다시 구현하지 않고도 해당 규칙을 재사용할 수 있도록 해줍니다.
API를 자세히 설명하는 대신, 함수의 순방향 및 역방향 규칙이 어떻게 구현되는지 살펴보겠습니다 . 혼란을 피하기 위해 ChainRules 문서sin 에서 사용하는 표기법 대신 저희가 사용하는 표기법을 사용하겠습니다 .
팁
ChainRules.jl 문서에는 명명법과 표기법을 소개하는 잘 작성된 수학 입문서 가 있습니다.
-- 순방향 모드 AD 규칙

-- 역방향 모드 AD 규칙

-- 체인룰스코어.jl
자체 패키지를 개발하는 경우 특정 AD 구현에 의존하지 않고도 패키지에 대한 순방향 및/또는 역방향 규칙을 정의할 수 있는 가벼운 종속성인 ChainRulesCore.jl 을 활용할 수 있습니다 .

-- 깊이 1: AST 표현

-- 심도 2: 줄리아 IR

-- 심층 3: LLVM 표현


-- 깊이 4: 네이티브 코드


.text
.file "foo"
.globl julia_foo_3762 # -- Begin function julia_foo_3762
.p2align 4, 0x90
.type julia_foo_3762,@function
julia_foo_3762: # @julia_foo_3762
; ┌ @ /home/runner/work/julia-ml-course/julia-ml-course/lectures/L6_Automatic_Differentiation.jl#==#32f6945a-d918-4cdc-8c4d-8d3cd898392d:1 within `foo`
# %bb.0: # %top
; │┌ @ int.jl:87 within `+`
add rdi, 2
; │└
; │┌ @ math.jl:1576 within `sqrt`
; ││┌ @ float.jl:294 within `float`
; │││┌ @ float.jl:268 within `AbstractFloat`
; ││││┌ @ float.jl:159 within `Float64`
vcvtsi2sd xmm0, xmm0, rdi
; ││└└└
; ││ @ math.jl:1578 within `sqrt` @ math.jl:686
js .LBB0_2
# %bb.1: # %L7
; ││ @ math.jl:1578 within `sqrt` @ math.jl:687
vsqrtsd xmm0, xmm0, xmm0
; ││ @ math.jl:1578 within `sqrt`
ret
.LBB0_2: # %L5
push rbp
; ││ @ math.jl:1578 within `sqrt` @ math.jl:686
movabs rax, offset j_throw_complex_domainerror_3764
movabs rdi, 140291160999088
mov rbp, rsp
call rax
.Lfunc_end0:
.size julia_foo_3762, .Lfunc_end0-julia_foo_3762
; └└
# -- End function
.section ".note.GNU-stack","",@progbits
Zygote.jl 은 널리 사용되는 역방향 AD 시스템입니다. ChainRules.jl을 사용하여 "IR 수준 소스 간" 변환을 수행합니다. 즉, Julia IR을 참조하여 미분 대상 함수의 구조를 분석합니다. 그런 다음 VJP를 계산하는 함수를 생성합니다.


-- 주의 사항
앞서 배웠듯이 Zygote의 역모드 AD는 여러 다른 함수로 구성된 함수에 체인 규칙을 적용합니다.


팁
항상 AD 패키지 설명서의 제한 사항/주의 사항/주의 사항에 대한 섹션을 읽으세요.
Enzyme.jl 은 LLVM 소스 간 변환을 수행하는 새롭고 실험적인 AD 시스템으로 , 정방향 및 역방향 AD를 모두 지원합니다. 현재 ChainRules.jl을 지원하지 않고 자체 EnzymeRules를 사용합니다 . Enzyme은 성능이 뛰어나며 변형 함수를 지원합니다.
패키지가 빠르게 개발 중이고 API가 아직 완전히 안정화되지 않았으므로 이 예제에서는 Enzyme을 사용한다는 점에 유의하세요 v0.13.

-- Low-level API
Enzyme은 autodiffVJP 및 JVP를 위한 저수준 API인 를 내보냅니다. 이 함수는 사용자가 할당을 제어하여 성능을 극대화할 수 있도록 하기 때문에 좀 더 고급 기능입니다.
효소는 autodiff역모드 AD와 함께 사용될 수 있습니다.

및 순방향 모드 AD

팁
Enzyme은 LLVM 수준에서 차별화되므로 C, C++, Swift, Julia, Rust 등 모든 LLVM 기반 언어를 차별화할 수 있습니다. 자세한 내용은 Enzyme 웹사이트 에서 확인할 수 있습니다 .
이 강의에서는 순방향 및 역방향 AD를 설명하기 위해 선형 사상과 총 미분으로 바로 넘어갔습니다. 이를 통해 가장 간단한 방법인 유한 차분법을 건너뛰었습니다 .

-- Caveats 주의 사항

-- FiniteDiff.jl 및 FiniteDifferences.jl
FiniteDiff.jl 과 FiniteDifferences.jl 은 유한 차분을 구현하는 두 가지 유사한 패키지입니다. 설명서 에는 두 패키지의 차이점이 나와 있습니다.
- FiniteDifferences.jl은 기본적으로 모든 유형을 지원하는 반면 FiniteDiff.jl은 배열형 유형만 지원합니다.-
- FiniteDifferences.jl은 고차 근사를 지원합니다.
- FiniteDiff.jl은 할당을 최소화하기 위해 신중하게 최적화되었습니다.
- FiniteDiff.jl은 희소 야코비안의 효율적인 계산을 위해 벡터 채색을 지원합니다.
FiniteDiff.jl

유한차이.jl

마지막으로, 연산자 오버로딩을 사용하여 순방향 AD를 구현하는 ForwardDiff.jl을 살펴보겠습니다 . ForwardDiff는 Dual 숫자 형식을 도입합니다.

팁
ForwardDiff.jl은 가장 안정적이고 신뢰할 수 있는 Julia AD 패키지 중 하나로 간주됩니다.
우리는 약간씩 다른 구문과 반환 유형을 가진 다섯 개의 서로 다른 패키지를 사용하여 그래디언트를 계산했습니다. 이 모든 패키지에 대한 공통 인터페이스가 있다면 좋지 않을까요?
DifferentiationInterface.jl 은 정확히 이런 역할을 합니다.

팁
저는 저자 중 한 명이므로 중립적이지는 않지만 DifferentiationInterface를 통해 모든 백엔드를 사용하는 것을 권장합니다!
특징은 다음과 같습니다.
- 여러분이 원하는 모든 1차 및 2차 연산자 (그래디언트, 야코비안, 헤시안...)
- 제자리 및 제자리 외 차별화
- 준비 메커니즘(예: 캐시를 미리 할당하거나 테이프를 기록하는 것)
- 내장된 희소성 처리
- DifferentiationInterfaceTest를 통해 접근 가능한 테스트 및 벤치마킹 유틸리티

호출하면 benchmark_differentiation유용한 모든 백엔드에 대한 벤치마크 결과가 제공됩니다 DataFrame.


Julia 패키지를 개발할 때도 DifferentiationInterfaceTest.jl을 사용할 수 있습니다.

이 예시에서는 모든 테스트가 통과되었으며, 이를 통해 모든 백엔드를 벤치마킹할 수 있었습니다. 프로젝트 진행 중에 패키지 테스트 에 대해 더 자세히 알아보실 수 있습니다.
이제 AD에 대한 지식을 갖추었으니 juliadiff.org 에서 Julia AD 패키지 목록을 살펴보세요 !
AD 시스템에 대한 통찰력 있는 대화와 이 강의에 대한 피드백을 주신 Niklas Schmitz 에게 진심으로 감사드립니다 . 그가 없었다면 이 강의는 지금의 형태로 존재하지 못했을 것입니다.
이 강의에 대한 추가적인 영감은 다음에서 나왔습니다.
- Robert Ghrist 교수의 사슬 법칙에 대한 강의
- SciML 책의 순방향 모드 AD 장
- 해커를 위한 Mike Innes의 차별화 , 여기 렌더링됨
추가 참고 자료
- Griewand & Walther, 미분 평가: 알고리즘 미분의 원리와 기법
- 스피박, 다양체에 대한 미적분학
다음 강의: [AI 인공지능 머신러닝 딥러닝/Julia] - 줄리아 프로그래밍 - 딥러닝, Deep Learning
줄리아 프로그래밍 - 딥러닝, Deep Learning
첫 강의: [AI 인공지능 머신러닝 딥러닝/Julia] - Julia 프로그래밍 - 언어 및 강의 소개 Julia 프로그래밍 - 언어 및 강의 소개Julia 프로그래밍 언어줄리아(Julia)는 고성능의 수치 해석 및 계산과학의 필
inner-game.tistory.com
[AI 인공지능 머신러닝 딥러닝/인공지능 수학] - 2025 인공지능·머신러닝 입문자를 위한 핵심 통계개념 완전정복 (1/2)
2025 인공지능·머신러닝 입문자를 위한 핵심 통계개념 완전정복 (1/2)
안녕하세요! 오늘은 최근에 시청한 유튜브 신박Ai의 “[인공지능을 위한 머신러닝101] 머신러닝을 위한 기초통계개념” 영상을 바탕으로, 인공지능과 머신러닝을 공부하는 데 꼭 필요한 통계 개
inner-game.tistory.com
[AI 인공지능 머신러닝 딥러닝/Julia] - Julia 프로그래밍 무료 강의 추천 - Datacamp 데이터캠프 데이타캠프 줄리아
Julia 프로그래밍 무료 강의 추천 - Datacamp 데이터캠프 데이타캠프 줄리아
데이터캠프 datacamp.com 라는 사이트를 추천드립니다. Coursera나 edX 처럼 무료 교육으로 아주 유명한 사이트입니다.사이트주소 : datacamp.com 간단히 구글계정으로 로그인 하시면 됩니다. 지원되는 언
inner-game.tistory.com