Yo-mi 2023. 8. 14. 20:15

1. Define your problem (domain)

 1학년 2학기부터 머신 러닝과 딥 러닝에 관심이 생겼고 꾸준히 공부해오고 있다. 특히 이번 학 기에 기계학습 수업을 통해 인공지능에 관한 흥미와 지식은 늘어가고 있는 중이다. 또한 평소에 딥러닝을 이용해 개발된 ChatGPT, 딥드림과 같은 소프트웨어나 유명한 화풍을 학습해 다른 이미 지에도 적용시키는 style transfer와 같은 기법에 관심이 있어왔다. 따라서 인공지능 분야, 특히 AI 어플리케이션 분야에서 사용하는 언어는 어떤 것들이 있고 그 중 하나의 언어를 지정해 그 언어 의 장점과 단점은 무엇인지 등에 대해 조사해보았다.

 

2. Review widely used domain specific languages

 인공지능 분야에서 쓰이는 언어는 내가 생각했던 것보다 다양하다. 가장 대표적으로 쓰이는 언 어는 ‘python’이다. 그 외에 ‘C++, JVM언어군, JavaScript, swift, R, Julia’가 있다. JVM 언어군(자바, 스칼라, 코틀린, 클로저 등)은 자연어처리, 텐서 연산, GPU 가속 딥 러닝 스택 등 분야를 불문하고 파이프라인의 모든 부분에서 풍부한 라이브러리가 존재한다. JavaScript는 구글 TensofFlow.js가 계 속 개선되면서 케라스(Keras) 및 텐서플로우 모델을 브라우저에 배포하거나, GPU 가속 계산을 위 해 웹GL을 사용해서 Node.js를 통해 배포하여 쓰이게 되었다. Swift는 텐서플로우의 기능을 군더 더기 없이 완전한 형식으로 바인딩하고, 마치 파이썬을 사용하는 것처럼 파이썬 라이브러리를 가 져올 수 있는 기능을 제공한다. 줄리아(Julia)는 수치 계산에 초점을 둔 고성능 프로그래밍 언어다.

 

3. Select an appropriate language and study: Julia

 줄리아는 Matlab, R, Mathematic, Octobe와 같은 과학 컴퓨팅 언어를 사용하고 이러한 환경에 종사하는 사용자가 많이 사용하는 언어이다. 병렬 컴퓨팅을 지원할 뿐만 아니라 이것으로 작성한 코드의 실행 속도는 C보다는 약간 느리지만 Python이나 Matlab보다 훨씬 빠르다. 이런 점에서 줄리아가 AI 어플리케이션 개발 언어로 좋을 것 같다고 느꼈다. 아직까지는 Julia를 요구하는 회사 는 거의 없다. 하지만 미래에는 Julia가 더 발전되어 AI 어플리케이션 중요 개발 언어 중 하나로 자리잡을 것이라고 생각해 선택하고 조사하게 되었다.

 

- Language author

Jeff Bezanson, Stefan Karpinski, Viral B. Shah, Alan Edelman에 의해 개발되었다.

 

- When and Why author made the language

 줄리아는 4인으로 구성된 팀이 2009년에 개발해 2012년에 발표했다. 이들은 과학 계산과 데이터 처리에 사용되는 파이썬 등 기타 언어 와 어플리케이션의 단점을 해결하는 대안으 로 시작했다. 줄리아 개발팀은 “우리는 욕심이 많다.”며 다음과 같은 글들을 남기기도 했다. "우리는 오픈소스이면서 자유롭게 쓸 수 있는 언어를 원한다. C의 속도에 루비의 역동성을 원한다. 동형성(homoiconic)이 있으면서 리스프(Lisp) 같은 진정한 매크로를 지원하되 매트 랩(Matlab)과 같이 분명하고 익숙한 수학적 표기법이 있는 언어를 원한다. 파이썬만큼 일반 프로그래밍에 사용할 수 있고 R만큼 통계가 쉬우며 펄(Perl)만큼 문자열 처리가 자연스럽고, 매트랩만큼 선형대수가 강력하며 셸(shell)처럼 프로그램을 이어 붙이는 것에 능한 것을 원 한다. 배우기가 매우 간단하면서도 대부분의 전문 해커를 기쁘게 할 수 있는 것, 대화형이 기를 원하고 컴파일되기를 원한다. (C만큼 속도가 빨라야 한다고 말했던가?)" (블로그 링크: https://julialang.org/blog/2012/02/why-we-created-julia/) 다음과 같은 이유로 그들은 줄리아를 개발했다. 그들이 남긴 글을 보니 정말 욕심이 가득해 보였고 한편으로는 그만큼 줄리아를 열정적으로 개발했고 발전시키고 있음이 느껴졌다.

 

- Pros and Cons of the language

 장점은 첫째, 속도가 C와 포트란에 비견될 정도로 빠르다. 더 빠른 런타임 성능을 위해 LLVM 컴파일러 프레임워크를 사용해 JIT 컴파일 된다. 둘째, 매뉴얼이 깔끔하다. 이는 줄리 아 매뉴얼(https://docs.julialang.org/en/v1/)과 R 메뉴얼(https://www.r-project.org/otherdocs.html)을 비교해보면 확실하게 느낄 수 있다. 셋째, 모든 패키지가 GitHub로 관리된다. 줄리아의 패키지 저장소가 Github인 것이다. 줄리아 패키지 또한 깔끔하다. 넷째, 최신 언어 이기 때문에 모듈이 잘 정리되어 있고 현대적이고 함수형인 문법을 사용할 수 있으며 타임 시스템 또한 강력하다. 다섯째, 파이썬, C, 포트란 라이브러리 호출이 가능하다. 그 외에도 메타프로그래밍 지원, 디버거 보유, 탁월한 병렬 처리, 자동 메모리 관리 기능 등의 장점들 이 있다.

 단점은 Python이나 R 등과 비교했을 때 아직 사용자가 적어 패키지가 적다. 하지만 일반 개발목적의 경우가 아니라 자연과학에 관련된 분야로 한정 짓는 경우에는 많은 패키지가 잘 개발되어 있다고 한다. 이를 통해 자연과학과 관련된 분야인 경우에는 Julia를 주 개발 언어로 사용하여도 괜찮겠다는 생각을 했고, 추후에 줄리아를 사용해 자연과학과 관련해 연 구를 하거나 프로젝트를 해봐야겠다. 추가적으로 KAIST 인문사회과학 연구소에서 요구하는 언어 중 하나가 Julia인 것을 알 수 있다. 또한 사용자가 적다는 것은 대규모의 헌신적이고 활발한 커뮤니티가 없다는 것이다. 줄리아 커뮤니티는 열정적이고 커지고 있지만 아직 파이 썬 커뮤니티의 규모에 비하면 미미하다. 이는 시간이 지나면 해결될 사항이라고 생각하고 나 또한 Julia 언어를 사용함으로써 활발한 커뮤니티 형성에 기여할 수 있도록 노력할 것이다.

 

- Standard and/or Roadmap of the language

https://docs.julialang.org/en/v1/

줄리아의 standard는 상단 문서에 깔끔하게 정리되어 나와있다.

공식 사이트에 Roadmap은 나와있지 않지만 다음의 커뮤니티 대화 내용을 기반으로 로드맵 을 정리해 보았다.

 1. Julia 기본 문법 학습

  • 변수, 자료형, 연산자, 함수, 제어문 등의 기본적인 문법 학습
  • Julia의 특징과 장단점 이해

 2. Julia 패키지 및 라이브러리 학습

  • Julia 패키지 매니저(Pkg) 사용법 학습
  • Julia에서 제공하는 다양한 라이브러리와 패키지 학습
  • DataFrames.jl, Plots.jl, JuMP.jl, Flux.jl 등

 3. 과학 및 공학 계산에 대한 이해

  • Julia를 사용하여 수학, 통계, 공학 등의 계산을 해결할 수 있는 방법 학습
  • 행렬 연산, 선형 대수, 통계 분석 등

 4. 고급 주제 학습

  • 다중 스레드 및 병렬 처리, 코드 최적화, 패키지 개발 등 5. 프로젝트 구현 및 실전 응용
  • Julia를 사용하여 프로젝트를 구현해보고, 실제 문제를 해결하는 경험 쌓기

 

- Famous open source software using the language: SciML

(링크: https://docs.sciml.ai/Overview/stable/) SciML은 줄리아 프로그래밍 언어로 개발된 과학적 기계학습을 위한 오픈소스 소프트웨어이 다. Sci는 science를 의미하고, ML은 기계학습을 의미한다. 미분 방정식(이산 방정식, 상미분 방정식, 분할 및 분할 ODE, 확률 상미분 방정식, 임의 미분 방정식, 미분 대수 방정식 지연 미분 방정식, 혼합 이산 및 연속 방정식 등), 대규모 비선형 시스템, 자동화된 모델 검색을 위한 소프트웨어이다.

SciML의 목표: 강력한 교차 언어 과학 기계학습 소프트웨어 개발을 위한 허브가 되는 것이다.

그 외도 선형 및 비선형 최적화 문제를 모델링하고 해결하는 데 사용되는 패키지인 JuMP, R의 데이터프레임과 유사한 구조를 제공하는 데이터프레임 라이브러리인 DataFrames.jl, 딥 러닝 모델을 구축하고 학습시키는 데 사용되는 패키지인 Flux.jl, 다양한 유형의 상미분방정 식 문제를 해결하는 데 사용되는 패키지인 DifferentialEquations.jl, 베이지안 추론 및 확률적 모델링을 수행하는 데 사용하는 패키지인 Turing.jl, 웹 어플리케이션 개발을 위한 웹 프레임 패키지인 Genie.jl이 있다.

 

4. Review

 아까 말한대로 아직까지는 Julia를 요구하는 회사가 거의 없다. 하지만 미래에는 Julia가 더 발전 되고 많은 사람들이 사용해 커뮤니티가 활성화되면서 향후 데이터 과학 및 공학 분야에서 더욱 중요한 역할을 할 것이라고 생각한다. 아직 언어를 아주 깊게 공부하지 않은 나의 입장에서는 Julia의 깔끔하고 보기 좋게 매뉴얼을 구성한 점이 마음에 쏙 들었다. 당장은 Python을 이용해 기 계학습을 공부하겠지만, 이번 과제를 통해 파이썬 외에도 다양한 언어가 있음을 배웠고 특히 Julia가 앞으로 더 발전할 언어라고 느꼈으므로 필요에 따라 파이썬이 아닌 다른 ‘도구’인 Julia를 꼭 공부해볼 것이다.