소프트웨어 2.0 개념 이해하기
Software 2.0
Software 2.0은 안드레아 카르파티가 2017년 미디엄에 작성한 블로그 글에서 언급한 개념입니다. 그는 이 글을 통해 소프트웨어 개발에 있어 패러다임의 큰 변화가 있을 것이라고 이야기했습니다.
소프트웨어 1.0은 우리가 기존에 알고 있던 것으로 Python, C++ 등의 언어를 사용해 명시적인 지시사항을 코딩한 것입니다.
소프트웨어 2.0은 신경망의 가중치와 같은 훨씬 더 추상적이고 사람에게 친숙하지 않은 언어로 작성됩니다. 이 코드는 가중치가 많기 때문에 (일반적인 네트워크는 수백만 개를 가짐) 사람이 직접 작성하지 않습니다. 이렇게 만들어진 모델을 우리가 사용할 수 있습니다.
SW 2.0의 첫번째 접근 방식은 프로그램의 목표를 설정하는 것입니다. 예를 들어 "입력 출력 쌍의 예제 데이터 세트를 만족시키기" 나 "바둑 게임을 이기기"와 같은 것들이 있겠습니다.
SW 2.0의 두번째 접근 방식은 코드의 대략적인 구조(예: 신경망 아키텍처)를 작성하여 검색할 프로그램 공간의 부분 집합을 식별하고, 이 공간에서 작동하는 프로그램을 찾기 위해 사용 가능한 컴퓨팅 자원을 사용하는 것입니다.
출처 : 안드레아 카르파티 블로그
소프트웨어 2.0에서는 대부분의 소스 코드가 1) 원하는 행동을 정의하는 데이터셋과 2) 코드의 대략적인 구조를 제공하는 신경망 아키텍처 (neural net) 로 구성되지만, 많은 세부 사항 (가중치) 이 채워져야 합니다. (나 : 여기에서는 일종의 파인튜닝에 대해서 이야기하고 있는 것 같습니다.)
소프트웨어는 세상을 삼켰지만 AI (소프트웨어 2.0) 는 소프트웨어를 삼킬 것입니다.
변화가 일어나고 있는 분야
소프트웨어 1.0에서는 어려웠지만 소프트웨어 2.0에서 비약적인 발전을 보이는 분야는 다음과 같습니다.
시각적 인식 (Visual Recognition)
음성 인식 (Speech recognition)
음성 합성 (Speech synthesis)
기계 번역 (Machine Translation)
게임
데이터베이스
소프트웨어 2.0의 장점
계산적으로 동질적이다. (앞으로 나아가는 matrix 연산)
실리콘에 굽기 쉽다.
실행시간이 일정하다.
일관적인 메모리 사용
이식성이 좋고 민첩하다.
모듈이 최적의 전체로 융합될 수 있다.
이미지/비디오 및 사운드/음성과 관련된 모든 것을 포함하여 많은 수직 분야에서 사람이 작성할 수 있는 코드보다 더 나은 코드를 작성할 수 있다.
소프트웨어 2.0의 단점
이해하기 어렵다.
예상치 못한 방식으로 실패할 수 있고 훈련 데이터의 편향을 무의식적으로 채택하는 등의 방식으로 "조용한 실패"가 일어날 수 있다.
2.0 스택에서의 프로그래밍
소프트웨어 1.0은 우리가 작성하는 코드이고 소프트웨어 2.0은 최적화에 의해 작성된 코드로 평가 기준에 기반합니다. (예: "이 훈련 데이터를 올바르게 분류하라")
명확한 프로그래밍은 아니지만 성능을 반복적으로 평가할 수 있는 분야는 이러한 전환의 대상이 가능성이 큽니다. 최적화가 인간이 작성할 수 있는 코드보다 훨씬 더 나은 코드를 찾을 수 있기 때문입니다.
소프트웨어 2.0을 새롭게 떠오르는 프로그래밍 패러다임으로 인식하면 할 수 있는일이 더 많아집니다.
2.0 스택에서 프로그래밍은 데이터셋을 축적하고, 정제하고, 불필요한 것을 제거하는 것으로 이루어집니다.
내 생각
살짝 이해하기 어려운데 2017년에 이미 LLM의 범용성과 이를 다루는 방법에 대해 생각을 정리했다는 것만으로 대단하다고 생각한다.
소프트웨어 1.0은 명시적인 프로그래밍이다. 반면에 소프트웨어 2.0 에서는 인공지능을 활용해서 좀 더 유동적인 프로그래밍을 할 수 있게 됐다. 이른바 정형적인 프로그래밍에서 비정형적인 프로그래밍으로의 변화이다. 목표와 데이터를 입력하고 신경망의 아키텍처를 사용하면 원하는 부분을 찾아나갈 수 있다. 일일이 지정을 해주는 프로그래밍이 아니라 최적화를 통해 문제를 해결하는 것이다.
이미 목표와 데이터를 입력하면 원하는 결과를 얻을 수 있다는 것은 프롬프트 엔지니어링이라는 용어로 자리잡고 있다. 하지만 여기서 안드레아가 이야기 하는 것은 좀 더 넓은 범위의 소프트웨어 2.0이다. 데이터셋과 신경망 아키텍처를 넣는다는 것에서 일종의 파인튜닝을 이야기하고 있는 것 같다.
파인튜닝을 통해 패턴이 일정한 분야에서 엄청난 변화가 일어날 것 같다. 패턴이 정해져 있는 일은 인공지능이 대부분 수행할 수 있게 될 것이다. 그런면에서 ChatGPT와 같은 LLM의 등장은 서두에 불과하다. 물론 현재의 파인튜닝은 데이터도 많이 필요하고 비용도 많이 들고 효과성의 문제도 있어서 많은 발전이 있어야 할 것 같다. 좀 더 가벼운 파인튜닝 기법이 개발되고 패턴 -> 인공지능이 해결이라는 공식을 만들 수 있는 일종의 도구가 등장한다면 인공지능계를 석권할 것이라고 본다.
소프트웨어 패러다임의 변화가 맞을까? 소프트웨어 1.0에서 소프트웨어 2.0으로 100% 전환한다기 보다는 사용할 수 있는 새로운 레이어가 생겼다고 보는게 맞을 것 같다. 비용 효율면에서 소프트웨어 1.0이 없어지지는 않을 것이기 때문이다. 하지만 소프트웨어 2.0은 확실히 소프트웨어 1.0이 못하는 영역이 분명하다.
사실 개인이나 스타트업 입장에서 이를 어떻게 반영할 것인가에 대해서는 고민이 크다. 모델을 만들 수도 없는 노릇이고 프롬프트 엔지니어링으로 무언가를 만들어도 금방 따라잡히고 만다. 하지만 확실한 것은 일종의 workflow를 일부 대체할 수 있다는 점이다. 이 작업 흐름에는 국소적인 추론이 필요한 일도 포함된다. 예를 들어 사용자가 글을 올렸을 때 이를 스팸인지 아닌지 확인하고 승인해주는 로직 같은걸 너무나도 쉽게 만들 수 있다. 여러가지 일을 할 수 있는 보편적인 소프트웨어의 탄생이다. (universal logic application)
또 내 일에 있어서도 일종의 자동화가 일부 가능할 것 같다. 전체는 아니더라도 부분적인 일에서 생산성을 높일 수 있는 기회가 많이 보인다.