AI 공부 도전기

Algorithm는 무엇이고 왜 중요해? - AI 관련 내용 포함 - 아이공

목차
1. 컴퓨터 공학에서 필수적인 과목 : Algorithm
2. Algorithm의 어원과 정의
3. Algorithm 왜 배우나요?
4. Algorithm 구현과 특징
5. 이제 왜 AI 연구자에게 Algorithm을 요구하는지 이해하시나요?
6. 출처

<목차 번호를 선택하면 자동으로 이동합니다.>

 

1. 컴퓨터 공학에서 필수적인 과목 : Algorithm

 

 컴퓨터 공학을 전공한 사람들은 피해 갈 수 없는 두 가지 내용이 있습니다.

하나는 프로그래밍 언어이고 또 하나는 알고리즘입니다. 물론 각 학교의 학과마다 2개 혹은  3개로 더 늘려 심화 공부를 하는 반면 어떤 곳은 한 개의 자료 구조 과목 수강으로 알고리즘을 끝마칩니다. 그러나 결국 컴퓨터 공학부를 졸업해서 컴퓨터로 밥 먹고 살고자 한다면 당연스레 코딩 시험과 더불어 알고리즘 시험이 필수적이고 이를 수행하기 위해 다시 공부하는 사람이 다반사입니다.

 

 저는 다른 학과를 졸업했기에 졸업 후부터 AI를 공부하기 시작하면서 알고리즘의 필요성이 대두되고 이에 대한 회사들의 질의 또한 피해갈 수 없었기에 공부를 하기 시작했습니다.

 

 

2. Algorithm의 어원과 정의

 

 컴퓨터 공학 혹은 소프트웨어 관련 학과, 전자전기 등 공학 계열의 학과에서는 알고리즘을 배우지만 다른 곳에서는 접해보기 힘든 과목일 것입니다. 요즘과 같이 많은 전자기기가 있고 필수적인 세대에 있어 단어 정도는 많이 들어봤을 수도 있을 것입니다. 그리고 대략적으로 컴퓨터 하는 데 사용하는 것이라고만 생각하기 쉽습니다.

그러나 구체적으로 알고리즘은 무엇인지 아시나요? 어떤 것을 알고리즘이라고 하고 왜 배우는 것 일까요?

 

사실 우리는 이미 알고리즘을 알고 있고 체득하고 있습니다.

다만 정의를 몰랐을 뿐입니다.

고대부터 있었고 앞으로도 존재하는 이 단어는 단순히 컴퓨터에 국한된 내용이 아니라는 사실을 알 수 있습니다.

 

1) Algorithm의 어원

 

Wikipedia - 콰리즈미

어원적으로는 9세기 페르시아의 수학자인 Muhammad Al-Khwarizmi(780-850)의 이름을 라틴어 화한 Algorismus에서 따온 말입니다.(다른 곳에서는 "al-kha-raz-mi"에서라고 이야기합니다.) 이 사람은 "The Compendious Book on Calculation by Completion & Balancing"라는 책으로 "Father of Algebra" 대수의 아버지라 불리는 사람으로 어릴 때부터 아버지의 영향을 받아 공부해왔으며 수학, 천문학, 지리학에 특화된 연구자였습니다.

더 자세한 이야기를 보고 싶다면 아래 Wikipedia에 접속해보세요

 

콰리즈미 - 위키피디아

 

관련 내용과 관련해서 더 자세히 살펴보면 위에서 이야기한 책 "The Compendious Book on Calculation by Completion & Balancing"에는 고대부터 구전되던 알고리즘의 지식들을 모아 총망라한 책으로 최초의 알고리즘인 선형과 이차 방정식에 대한 해결법이 적혀있었기에 알고리즘이라는 단어의 어원이 될 수 있었습니다.

 

여기서 우리는 알고리즘이 수학적으로 문제를 해결하는 푸는 방법론적인 절차에 대한 이야기를 최초로 우리가 사는 현대의 알고리즘으로 발전되어 왔다는 사실을 알 수 있습니다.

 

2) Algorithm 정의

 

많은 사람들이 Algorithm에 대해 정의를 했고 어떤 것이 맞다 이것을 정의로 하자라는 말이 없기에 제가 아닌 지식 선에서 요약하면 다음과 같이 정의할 수 있습니다.

 

알고리즘 Algorithm주어진 문제를 논리적으로 해결하기 위해 고안한 방법 절차들의 집합을 이야기한다고 생각합니다. 컴퓨터의 경우 어떤 문제를 해결하기 위한 효율적인 코딩의 절차를 이야기하는 것, 현실 세계의 우리들의 경우에는 집에 어떻게 가는 것이 빠른지 고민하는 것, 수험생의 경우 문제를 풀 때 어떻게 시간을 배분해야 할지 순서를 정하는 것, 수학적으로는 어떤 문제를 효율적으로 풀 수 있을지와 같은 내용을 이야기할 수 있습니다.

 

 

3. Algorithm 왜 배우나요?

 

컴퓨터와 관련되어 한정 지어 말하자면 말 그대로 적재적소에 효율적인 알고리즘을 사용함으로써 우리들이 사용하는 프로그램을 더 빠르고 더 정확하게 정보를 얻을 수 있기 때문입니다.

나중에 우리가 살펴보게 될 알고리즘 중 최단 거리를 예로 들어볼까요

현재 구글, 네이버, 카카오 기타 모든 인터넷 지도를 제공하는 사이트들은 최단 경로를 찾아주는 알고리즘을 하고 싶은데 어떤 알고리즘이 효율적인지 파악한 후에 그것을 가져다 사용합니다.

AI에서도 많은 부분을 고민하는 최적화의 경우에도 최적화 스케줄 알고리즘을 통해 그것을 해결하기 위해 힘쓰고 있습니다.

 

이를 통해 불필요한 소모적인 시간 낭비를 막고 소비자나 사용자, 개발자의 입장에서도 모두 Happy 한 결과를 얻을 수 있기 때문에 Algorithm을 배웁니다.

 

알게 모르게 이미 거의 모든 학문은 Algorithm을 사용합니다.

우리가 공부하고자 하는 AI, 생명공학, 화학, 물리, 수학, 공학을 포함한 이과 계열은 물론이고 심지어 문과라서 사용하지 않을 것 같지만 문헌을 찾는 문헌 정보, 역사, 고고학과, 예술, 경제 같은 곳에서도 알고리즘을 사용하고 학문의 목적에 맞게 프로그래밍해서 개발하고 있습니다.

 

 

4. Algorithm 구현과 특징

 

위키피디아나 다른 몇 개의 사이트들을 돌아다니다 보면 조건이나 특징에 대해 매우 많은 것들을 적어놓는 경우가 많았습니다.

이것은 미국 Stanford University : Kuth Professor가 "The Art of Computer Programming"에서 제시한 내용으로 아래와 같은 조건을 이야기했습니다.

조건

내용

입력 Input

주어지는 입력이 있어야한다.

출력 Output

도출되는 답이 존재한다.

명확성 Definiteness

명확한 단계를 거쳐야한다.

유한성(종결성) Finiteness

유한 시간 내에 종료한다.

효율성, 유효성 Effectiveness

효율적인 복잡도를 가져야 한다.

그러나 사실 우리가 Algorithm에서 주의를 기울여야 하는 조건 혹은 특징은 2가지입니다.

 

1. Correctness(명확성)

이 알고리즘은 올바른 값을 도출하며 그 결과값은 항상 명확한 단계를 거치는가

 

2. Efficiency(효율성)

이 알고리즘은 그 어떠한 단계의 것들보다 효율적인가

 

Efficiency와 관련해서 Time Complexity - Big-O 표기법은 다음 시간에 다루겠지만 맛보기로 설명하자면 아래와 같습니다.

 

GPU 서버가 무수히 많은 컴퓨터 환경에서 다루는 것과 CPU 만으로 돌리는 컴퓨터 환경의 차이는 당연히 알고리즘의 효율성의 문제라기보다 성능의 차이입니다. 

C++처럼 개발에 많은 시간이 소모되지만 빠르고 날카로운 펜싱 같은 프로그래밍 언어나 쉽고 편리한 대신 속도가 많이 느린 몽둥이 같은 Python 이 둘과 같은 프로그래밍 언어의 차이 역시도 알고리즘의 효율성 문제라기보다 프로그래밍 언어의 차이입니다.

때문에 Efficiency를 컴퓨팅 파워, 환경, 프로그래밍 언어와 같은 속도 차이 말고 알고리즘의 효율성만을 비교가 가능한 방식으로 Asymptotic Analysis를 사용함으로써 알아볼 수 있습니다.

더 자세한 내용은 다음 글을 통해 알아봅시다. (아직 없다면 기다려주세요.)

 

지금까지 이야기했던 내용과 추가적인 내용이 포함된 더 자세한 이야기는 아래 Khan Academy에서 정의한 알고리즘에 대한 YouTube 영상을 남겨둡니다.

아래 영상에서 다양한 알고리즘의 소개에 대한 간략한 내용을 들을 수 있습니다.

Compression Algorithms, Route Finding Algorithms, Rendering Algorithms, Optimization & Scheduling Algorithms, MinimaxAlgorithm 

Good Algorithm의 조건 : Correctness, Efficiency

 

 

 

5. 이제 왜 AI 연구자에게 Algorithm을 요구하는지 이해하시나요?

 

AI가 번영을 이룰 것이라 생각한 수많은 기업들에서 너 나할 것 없이 달려들지만 사실 AI 특히나 Deep Learning과 관련해서는 많은 사람들이 달려든 것은 불과 10년 좀 더 넓게 잡으면 20년 정도입니다. 그전까지는 Machine Learning과 관련된 연구, Pattern Recognition에 불과한 학문들이었습니다. 그것조차도 많은 시행착오를 겪으며 어려움을 많이 얻었지만요

많은 분들이 기초적인 딥러닝에 대한 내용을 봤다면 알 것입니다. 2차례의 긴 겨울을 겪고 나서야 layer 층을 쌓고 activation function으로 비선형을 사용하여 loss에 따른 optimizer를 구하는 이 간단한 구조를 얻어내는데 수많은 시간과 공이 들어갔다는 것을요

 

아직도 AI는 시행착오를 겪고 있으며 아직도 많은 난관들이 있을 것임이 자명합니다. 그렇기에 AI를 너 나할 것 없이 달려들었지만 이런 난관들을 극복할만한 인재가 없다. AI에 대한 사람이 부족하다는 말은 진짜 사람이 부족하다는 말이 아니라 그 역량을 뒷받침할 사람이 없다는 뜻입니다. 즉, 수학에 능통하며 알고리즘을 이해하고, 프로그래밍을 이해하며, 이와 관련된 논문들을 이해하고 구현까지 할 수 있는 사람. 박사급 고급 인력이 없다는 의미입니다.

그래서 연구는 진행해야하기에 많은 기업들은 최소한의 학력이나 경력을 써놓습니다.

석사 이상 혹은 2년 이상의 경력이라는 문구를 달아 넣었습니다. 

 

물론 AI를 공부하는데 컴퓨터 공학에서 배우는 Algorithm 학문이 필수적이냐라고 질문을 하신다면 조심스럽게 꼭 그런 것은 아닐 것이다라고 이야기할 것 같습니다. 만약 누군가 최적화를 위해 공부하고 있다면 그분에게는 Algorithm은 반드시 거쳐야 할 관문이겠지만 일반적인 빅데이터 분석가 Analysist에게 꼭 필요한가라고 묻는다면 그들에게는 SQL과 다양한 ML 기법들을 어떻게 Ensemble 해서 문제를 해결하고 outlier, 범위 분포 등을 어떻게 잡아내는가가 더 중요하기에 Algorithm의 필요성이 매우 적을 수 있습니다. 실제로 Data Analysist들에게 수학적인 역량이나 각 종 논문의 해석에 대해 묻지 Algorithm에 대해 묻지는 않으니깐요

그리고 굳이 사용하지 않아도 우리는 이미 Algorithm적 사고를 내외부에서 강요받고 실제로 사용하고 있기에 방향성만 알려주면 잘 될 것이다라고 생각하는 분들이 꽤 있는 것 같습니다.

 

더욱이 일반적으로 이야기하는 Deep Learning과 관련된 시중에 나와 있는 수많은 책들과 수많은 회사들의 연구원들이 알고리즘을 전부 알고 짜는 것보다 일부 패키지로 구성된 PyTorch나 Tensorflow 등을 활용하여 이미 구현된 layer들을 넣고 loss를 구현하고 필요한 regularization이나 구현물에 대해 class를 따로 구성하는 등 일부 프로그래밍 언어의 문법이나 딥러닝 상식선에서 접근이 가능하기에 어떤 분들께는 학문적 알고리즘이 필수적이지는 않습니다.

 

그러나 제가 필수적이지 않다고 말했을 뿐 결국 그분들 또한 학문으로써의 알고리즘을 공부해야 한다는 것이 저의 생각입니다.

왜 중요한지 효율성을 따지는 컴퓨터 엔지니어, 소비자의 입장에서 단순히 AI가 다 알아서 해줄 거야라는 생각은 착각에 가까울 것이고 실제로 맡은 업무에 있어 알고리즘을 공부한다는 것은 더 깊게 공부하고 효율적인 연구할 수 있는 발판의 계기가 됩니다.

 

저는 아직 초보자이고 AI 도전자이기에 섣부르게 말하는 것일 수 있지만 왜 인공지능을 연구하겠다고 대학원에 진학하는 학생들에게 교수님께서 Algorithm을 질문하는지 이해가 됩니다. 문제를 얼마나 효율적으로 해결할 수 있고 그런 논리를 너는 가지고 있니라고 묻는 질문과 다를 바 없기 때문입니다. 

 

그렇기에 저는 아무리 수학의 중요성이 Algorithm보다 중요하지만 여러분들은 결국 Algorithm도 해야 AI에서 살아남을 수 있을 것 같아요라고 말하게 될 것 같습니다.

 

읽어주셔서 감사합니다.

6번은 많은 참고를 했던 5개의 사이트를 남겨두었습니다. 이 자료들 또한 도움이 되시길 기원합니다.

 

6. 출처

 

1. https://ko.wikipedia.org/wiki/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98

 

알고리즘 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 알고리즘(라틴어, 독일어: Algorithmus, 영어: algorithm 알고리듬[*], IPA: [ǽlɡərìðm])은 수학과 컴퓨터 과학, 언어학 또는 관련 분야에서 어떠한 문제를 해결하기 위해 정해진 일련의 절차나 방법을 공식화한 형태로 표현한 것을 말한다. 알고리즘은 연산, 데이터 진행 또는 자동화된 추론을 수행한다. 산법(算法)으로 번역되기도 한다. 알고리즘은 9세기 페르시아의 수학자인 무하마드 알콰리즈미(Mu

ko.wikipedia.org

2. https://ko.khanacademy.org/computing/computer-science/algorithms/intro-to-algorithms/v/what-are-algorithms

 

알고리즘이란 무엇이며, 왜 중요한가요?

 

ko.khanacademy.org

3. https://terms.naver.com/entry.nhn?docId=1624939&cid=42171&categoryId=42177

 

알고리즘 문화

알고리즘은 프로그래밍 언어를 사용해 하나의 작업을 수행하는 방법에 대한 서술로, 논리 요소와 통제 요소로 구성된다. 일반적으로 알고리즘 문화는 알고리즘적 사고방식이 지배하는 문화라 할 수 있다. 알고리즘 문화는 크게 두 가지 차원에서 접근할 수 있는데, 그 하나는 소프트웨어 문화의 관점이고, 다른 하나는 지식 담론의 관점이다. [1. 알고리즘의 개념과 속성] 알고리즘(algorithm)은 프로그래밍 언어를 사용해 하나의 작업을 수행하는 방법에 대한 서술로

terms.naver.com

4. https://opentutorials.org/course/2471/13912

 

알고리즘의 정의 - 프로그래밍 입문

알고리즘(라틴어, 독일어: Algorithmus, 영어: algorithm )이란 어떠한 문제를 해결하기 위한 여러 동작들의 모임이다. 유한성을 가지며, 언젠가는 끝나야 하는 속성을 가지고 있다. 수학과 컴퓨터 과학에서 알고리즘이란 작동이 일어나게 하는 내재하는 단계적 집합이다. 알고리즘은 연산, 데이터 진행 또는 자동화된 추론을 수행한다. 알고리즘의 조건 알고리즘은 다음의 조건을 만족해야 한다. 입력 : 외부에서 제공되는 자료가 0개 이상 존재한다. 출

opentutorials.org

5. http://www.ktword.co.kr/abbr_view.php?m_temp1=635

 

알고리즘 [정보통신기술용어해설]

 

www.ktword.co.kr

 

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading