AI_심화-1 OT

조현진·2024년 12월 27일
0

AI_심화

목록 보기
1/9

24년 27일 2달간의 AI 심화반이 시작했다.

AI_심화

왜 이걸 시작했을까?

지난 기간 스프링부트와 Nuxt.js를 활용해 웹 프로젝트를 하나 마쳤다. 이 과정에서 웹 개발의 기본적인 패턴은 어느정도 학습했다고 생각한다. 하지만 배움에 대한 아쉬움이 조금 남았었다.

  1. JAVA기반이 아니라 다른 언어로 백엔드를 구성해보고 싶었다.
  2. Redis를 이용해 데이터베이스단을 여러 방식으로 구성해보고 싶었다.
  3. 가능하다면 MSA를 채택한 아키텍쳐를 경험해보고 싶었다.

AI 심화반에서 새로 시작하는 프로젝트에서 위의 경험들을 채우고 싶었다. 하지만 오늘 1일차 OT를 다녀온 시점에서는 쉽지 않을듯 하다.

기존에 나는 LLM모델을 서비스에 활용해본적이 없다. 막연히 이렇게 생각했다. 기존 서비스가 사용하던 RDBMS에 AI를 위한 NoSQL데이터베이스를 함께 사용하게 되지 않을까, 그렇게 되면 Redis를 사용해 MSA방식을 흉내내볼수 있지 않을까. 하지만 2달 밖에 안되는 규모의 프로젝트에서 MSA를 도입할 이유가 없을것 같고, 마찬가지로 Redis를 사용할 이유도 없을듯 하다.

1일차에 AI를 활용한 서비스를 구현해본 적 있는 다른 분들의 기존 프로젝트를 살펴보았다. 아키텍쳐가 생각보다 단순했다. 그때 깨달았다.

하루에 3번이상 사용할 수 밖에 없는 어플

OT날 재미있는 시간을 가졌다. 강사님께선 프로젝트를 하나 새로 시작한다고 생각하고, 하루에 3번 이상 사용할 수 밖에 없는 어플을 2시간 동안 기획해보라고 하셨다.

브레인스토밍을해 아이디어를 내고 페르소나를 설정하고, 핵심기능을 고민하고 비즈니스 모델을 설정했다. 팀원들과 역할분담을 하고, 각자의 할일을 정리했다. GPT에게 어떤 팀의 프로젝트가 가장 성공가능성이 있는지 묻기도 했다. 이후에는 2시간동안이었지만 과정을 회고하고 어플의 개선점을 찾기도 했다.

짧은 시간이었지만 기획자의 역할에 대해 조금 더 이해하게 되는 경험이었다. 강제로 2시간동안 몰입해 고민하니 서비스가 나오고 역할이 나뉘었다. 단순히 아이디어를 고민하기 보다 위와같은 구체적인 질문이 주어지니 기획이 조금 더 쉬워지는 것 같다.
사실 학부에서 좋은 질문을 던지는걸 훈련받았다 생각했는데, 어떤 분야는 애초에 질문할 생각조차 하지 못했다. 아직도 부족하다.


선형대수학

선형대수학 공부를 하고 있다. 작년에 프리드버그 선형대수학 책을 반절 읽다가, 삼각함수에 대한 기초가 부족한거 같아서 khan academy를 통해 삼각함수를 공부하고 수학 공부는 그걸로 마무리한 경험이 있다.

최근 파이썬과 LLM을 이용한 프로젝트를 시작하기 앞서 어떻게 파이썬에 익숙해질까 고민하다가, 기존에 공부하던 선형대수학을 파이썬을 이용해 다시 공부하면 좋겠다고 판단했다. 사실 당장의 취업과는 무관한 공부라는건 인정한다. 하지만 요즘 드는, 개발자라는 직업의 본질적인 가치는 무엇일까 생각해보면 이런 공부는 한번은 꼭 해야한다는 생각에 미친다.
그래서 짬짬히 이틀에 한 챕터씩은 보려고 한다.

기존에 프리드버그 선형대수를 볼때는 수학자의 입장에서 이론적이고 추상적인 공부를 했었다. 이번에는 파이썬을 이용해 선형대수를 공부중이다. 확실히 연산과 알고리즘에 더 집중한 내용들이 많다. 진작에 이런 두 공부방식을 동시에 취했으면 어떨까 싶다. 작년에 공부한 이론적인 내용들을 많이 잊었기 때문이다.

역행렬

오늘은 정사각 행렬의 역행렬을 구해봤다. 역행렬은 선형독립인 행렬, 즉 행렬식이 0이 아닌 행렬에서만 정의된다. 왜냐고 묻는다면 사실 잘 이해가 되지는 않는다. 단순히 역행렬을 구하는 공식에서 분모에 행렬식이 나오기 때문이라고 답하면, 그건 굉장히 불충분한 설명이다. 정의에 입각해 증명된 설명이거나, 혹은 최소한 비순환적인 설명이어야 할텐데 위의 설명은 순환논증이기 때문이다.

역행렬은 행렬식의 역수에 수반행렬을 곱해서 구할수도 있다. 내가 본 책에서는 이런 방식을 설명했다. 그런데 그 코드가 너무 시간복잡도가 큰거 같아서 다른 방식이 있나 살펴봤다. 항등행렬을 이용해 첨가행렬을 만들고, 여기에 가우스 소거법을 적용하는 방법이나, LU분해를 사용하는 방법이 있었다. 보통 이런 방식이 더 복잡도가 적다고 한다.

슈트라센 알고리즘을 적용하는 방법도 있었다. 이건 예전에 알고리즘 공부하면서 쉬어가는 페이지, 이런 쪽에서 잠깐 다뤄서 흥미롭게 본 기억이 있다. 행렬곱의 시간복잡도는 일반적으로 O(n3)O(n^3) 이지만, 이를 O(n2.81)O(n^{2.81}) 까지 줄일 수 있다고 한다.

언젠가 직접 모델을 훈련시키면서 배운 내용을 떠올릴 수 있었으면 좋겠다. 그때에 또 가보면 생각이 달라질 수도 있다. 속된말로 대가리 박으며 공부중이다.

다음 챕터는 기저와 차원이다. 나는 이 부분이 가장 좋다. 무척이나 단순해보이는 표준순서기저가 벡터 공간을 생성한다는 걸 상상하면 세계의 일부분을 기술하는 일반적인, 하나의 우아한 방식이 있다는 생각이 들기 때문이다.

0개의 댓글