Problem Solving with Algorithms

728x90
반응형

첫 강의: [AI 인공지능 머신러닝 딥러닝/Julia] - Julia 프로그래밍 - 언어 및 강의 소개

 

Julia 프로그래밍 - 언어 및 강의 소개

Julia 프로그래밍 언어줄리아(Julia)는 고성능의 수치 해석 및 계산과학의 필요 사항을 만족시키면서 일반 목적 프로그래밍에도 효과적으로 사용될 수 있도록 설계된 고급 동적 프로그래밍 언어이

inner-game.tistory.com

 

 

 

이전 강의: [AI 인공지능 머신러닝 딥러닝/Julia] - 줄리아 프로그래밍 - 자동 미분 Automatic differentiation | Forward- & Reverse-Mode AD

 

줄리아 프로그래밍 - 자동 미분 Automatic differentiation | Forward- & Reverse-Mode AD

첫 강의: [AI 인공지능 머신러닝 딥러닝/Julia] - Julia 프로그래밍 - 언어 및 강의 소개 Julia 프로그래밍 - 언어 및 강의 소개Julia 프로그래밍 언어줄리아(Julia)는 고성능의 수치 해석 및 계산과학의 필

inner-game.tistory.com

 

 

 

 

줄리아 프로그래밍 - 딥러닝, Deep Learning

 


부여됨

데이터 세트 로드

MLDatasets.jl
전 처리
데이터 로더

 

플럭스.jl

내장된 층
-- 예 1: 연구가 높은 층
-- 예 2: 합성곱 반대
레이어 구성
-- 예: ResNet-18
모델 정의
손실 함수
최적화기
훈련
-- 테스트 세트를 준비하세요
-- 자동 미분에 대한 참고 사항
규정
훈련된 각별한 저장 및 로드

 

GPU 지원

배열 프로그래밍
-- 예: CUDA.jl
Flux의 GPU 지원
-- 사용자 정의 GPU 패널

 

 


 

 

 


부여됨

지난 강의에서는 딥러닝의 핵심인 자동 미분 (AD) 에 대해 살펴보았습니다 . AD는 신경망 손실 함수의 매개변수에 대한 기울기를 계산할 수 있게 해줍니다.

이 강의에서는 다양한 계층 유형, 활성화 함수, 학습 API 등 일반적인 딥 러닝 추상화를 제공하는 패키지인 Flux.jl을 살펴보겠습니다 .

 

using Flux

 

이 강의에서는 딥 러닝의 "Hello world"를 구현하여 Flux를 소개하고, MNIST 데이터 세트에서 작은 합성곱 신경망(CNN)을 학습해보겠습니다.

 

 

데이터 세트 로드

MLDatasets.jl

MLDatasets.jl 에서 손으로 쓴 숫자의 MNIST 데이터 세트를 로드할 것입니다 .

 

 

인덱싱을 사용하여 이 데이터 세트에서 일괄 처리된 기능과 대상 레이블을 검색할 수 있습니다.

 

dataset_train[1:10] # click on the arrow ▶ above this cell to unfold the tuple

 

 

우리는 손으로 쓴 각 숫자가 다음에 해당한다는 것을 알 수 있습니다.
28 x 28 회색조 이미지를 다루므로 0과 1 사이의 부동 소수점 숫자 행렬을 사용합니다. 배치 차원은 마지막에 오는데, 이는 Flux.jl의 규칙이기도 합니다.

아래 슬라이더를 사용하면 데이터 세트에서 개별 샘플을 선택하고 시각화할 수 있습니다.

 

 

샘플 1은 대상 클래스 y = 5입니다.

 

전 처리

이것을 함수로 구현해 보겠습니다.

 

 

 

데이터 로더

학습 루프에서는 학습 데이터의 배치를 반복해야 합니다. Flux는 이러한 반복자를 . 형태로 제공합니다 Flux.DataLoader.

기본 배치 크기인 128을 사용하여 다음과 같이 데이터를 로드합니다.

플럭스.jl

내장된 층

이 강의 서두에서 언급했듯이 Flux.jl은 일반적인 딥러닝 추상화를 제공합니다. 이러한 추상화에는 다음과 같은 내장 레이어가 포함됩니다 .

 

 

 

또한 업샘플링 레이어, 임베딩 벡터, 변환기용 어텐션 블록도 있습니다.

 

 

 

 

-- 예 1: 연구가 높은 층

완전히 연결된 고밀도 레이어를 정의해 보겠습니다.



 

 

 

 

 

 

-- 예 2: 합성곱 반대

 

합성곱 계층은 밀집 계층과 비슷한 방식으로 생성할 수 있습니다.

 

 

중략

 

 

레이어 구성

플럭스 계층은 소위 "데이터 흐름 계층" 을 사용하여 구성할 수 있으며 , 그 중 가장 중요한 계층은 다음과 같습니다.
- Chain: 포함된 레이어의 순차적 적용
- Parallel: 포함된 레이어의 병렬 적용
- SkipConnection: 포함된 레이어 입력과 출력 간의 "바로가기" 연결을 구현합니다.

이러한 데이터 흐름 계층은 원하는 대로 혼합하고 중첩하여 복잡한 모델 아키텍처를 만들 수 있습니다.

 

 

 

 

-- 예: ResNet-18

이를 보여주기 위해 Flux의 비전 모델 패키지 인 Metalhead.jl 의 사전 학습된 ResNet-18 모델 의 구조를 살펴보겠습니다 .

 

 

모델 정의

간단한 합성곱 신경망인 LeNet-5 아키텍처를 구현해 보겠습니다 . 모든 계층이 순차적으로 적용되므로, 이를 하나의 에 넣을 수 있습니다 Chain.

 

예상대로 모델이 작동하는지 확인하기 위해 무작위 입력 배치에 모델을 적용해 보겠습니다.

 

 

 

손실 함수

모델이 각 클래스의 확률을 로짓 으로 출력하길 원하기 때문에 로짓 교차 엔트로피 손실 함수를 사용할 수 있습니다.

 

 

 

최적화기

Flux는 Optimisers.jl 에서 그래디언트 기반 최적화기를 다시 내보냅니다. 이는 숙제 3에서 접했던 내용입니다. 여기서는 모델에서 Adam을 초기화합니다.

 

셀 위의 화살표를 클릭하여 ▶최적화 상태를 검사합니다. 예를 들어 최적화 모멘텀을 추적합니다.

 

 

훈련

신경망을 5개의 에포크(epoch) 동안 훈련시킵니다. 한 에포크는 전체 훈련 데이터를 한 번 통과하는 데 해당합니다.

Pluto가 백그라운드에서 실행되는 것을 막으려면 다음 확인란이 선택된 경우에만 교육 루프가 실행됩니다.

훈련이 잘 진행되었는지 확인하기 위해 손실 곡선을 시각화해 보겠습니다.

 

 

 

-- 테스트 세트 정확도 / 테스트 세트를 준비하세요

 

-- 자동 미분에 대한 참고 사항

 

 

 

 

규정 / 추론 /  interface

훈련된 모델을 사용하여 MNIST 숫자를 분류해 보겠습니다.


"훈련" 슬라이드에서 훈련 루프를 실행했는지 확인하세요 !

 

 

 

 

훈련된 각별한 저장 및 로드

 

 

 

GPU 지원

 

 

배열 프로그래밍

 

 

-- 예: CUDA.jl

다음 예는 CUDA.jl 문서 에서 가져온 것입니다 .

생성자를 사용하여 CuArray배열을 GPU에 복사합니다.\

 

 

Flux의 GPU 지원

 

 

-- 사용자 정의 GPU 패널

네이티브 커널 프로그래밍의 경우, 각 플랫폼의 개별 패키지 문서를 참조하세요. 모든 플랫폼(NVIDIA, AMD, Intel, Apple)을 대상으로 하는 GPU 커널을 작성하려면 KernelAbstractions.jl 을 참조하세요 .

 

 

 

기타 추가자료

 

Glorot

Glorot

 

 

Glorot의 어원과 뜻에 대해 정확한 검색 결과는 없으나, Glorot은 인공신경망 초기 가중치 초기화 방법으로 유명한 "Glorot 초기화" 또는 "Xavier 초기화"를 제안한 연구자의 이름입니다. 즉, Glorot은 고유명사로서 개인 이름에서 온 것으로 추정됩니다.

줄리아 프로그래밍 언어는 MIT에서 개발한 동적 프로그래밍 언어로, 과학과 공학 분야에서 빠른 계산 성능을 목표로 합니다. 2012년에 처음 발표되었으며, JIT 컴파일과 AOT 컴파일을 지원합니다. 특히 수치해석, 병렬 컴퓨팅, 그리고 딥러닝과 데이터 시각화 등의 분야에서 많이 사용됩니다.

 

 

Xavier 초기화(Glorot 초기화)

 

Xavier 초기화(Glorot 초기화)는 신경망의 각 층에서 가중치를 초기화하는 방법으로, 입력 노드 수와 출력 노드 수를 고려해 가중치 분포의 분산을 조절하는 방식입니다. 구체적으로, 가중치는 평균이 0이고 분산이 


  (fan_in은 입력 노드 개수, fan_out은 출력 노드 개수)인 정규분포에서 샘플링됩니다. 이 방법은 시그모이드나 tanh 같은 선형 또는 근사 선형 활성화 함수에 적합하며, 초기 학습 단계에서 기울기 소실(vanishing)이나 폭발(exploding)을 방지해 학습을 안정화합니다.

Xavier 초기화는 입력과 출력 간의 신호 분산이 균형을 이루도록 하여, 신경망이 깊어져도 정보가 적절히 전달되도록 돕습니다. TensorFlow나 Keras 같은 딥러닝 라이브러리에서는 'glorot_uniform'이나 'glorot_normal'이라는 이름으로 쉽게 사용할 수 있습니다.

요약하면, Xavier 초기화는 신경망 가중치를 각 층의 입력과 출력 노드 수에 기반하여 적절한 분산을 가진 분포에서 무작위로 초기화함으로써 학습 안정성 및 효율성을 높이는 기법입니다.이로써, 4주간의 줄리아 프로그래밍 공부가 막을 내렸습니다.

저는 4주동안 주말을 투자해서 한달동안 줄리아를 공부했습니다.

여러분도 이 자료를 기반으로 줄리아를 공부해보시는 것을 추천드립니다!

 

 

 

 

 

 

이 블로그의 관련 글

[AI 인공지능 머신러닝 딥러닝/Julia] - Julia 프로그래밍 - 언어 및 강의 소개

 

Julia 프로그래밍 - 언어 및 강의 소개

Julia 프로그래밍 언어줄리아(Julia)는 고성능의 수치 해석 및 계산과학의 필요 사항을 만족시키면서 일반 목적 프로그래밍에도 효과적으로 사용될 수 있도록 설계된 고급 동적 프로그래밍 언어이

inner-game.tistory.com

 

 

[AI 인공지능 머신러닝 딥러닝/Julia] - Julia 프로그래밍 무료 강의 추천 - Datacamp 데이터캠프 데이타캠프 줄리아

 

Julia 프로그래밍 무료 강의 추천 - Datacamp 데이터캠프 데이타캠프 줄리아

데이터캠프 datacamp.com 라는 사이트를 추천드립니다. Coursera나 edX 처럼 무료 교육으로 아주 유명한 사이트입니다.사이트주소 : datacamp.com 간단히 구글계정으로 로그인 하시면 됩니다. 지원되는 언

inner-game.tistory.com

 

728x90
반응형
반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
250x250