카테고리 없음

스파르타 AI-8기 TIL(11/3) -> AI활용에 대한 이해 = API

kimjunki-8 2024. 11. 3. 17:56
AI활용은 연구와 다르다!
AI 활용 -> 이미 만들어진 AI를 이용해 문제를 해결
연구 -> AI활용을 위한 AI를 직접 개발, 혹은 성능을 개선을 위한 활동입니다.
API
API(Application Programming Interface)는 소프트웨어 애플리케이션들이 서로 상호작용할 수 있도록 해주는 인터페이스를 의미합니다. API는 다양한 소프트웨어나 서비스들이 내부 로직을 공개하지 않고도 데이터를 교환하거나 특정 기능을 사용할 수 있도록 하는 표준화된 방법을 제공해줍니다.
쉽게 말해 두 체재가 서로의 로직을 숨김과 동시에 데이터를 사로 사용할 수 있게 해주는 방식이라고 생각하시면 좋습니다.
좀 더 구체적으로, API는 특정 작업을 수행하기 위한 일련의 규칙, 프로토콜, 도구들을 정의합니다. 이 규칙을 따르면 두 개 이상의 소프트웨어 시스템이 서로 데이터를 주고받거나 기능을 호출할 수 있습니다.

주요 요소들
1. 엔드포인트 (Endpoint)
엔드포인트는 API 호출이 전송되는 URL이나 경로입니다. 각 엔드포인트는 특정한 기능을 수행하며, 예를 들어 "https://api.example.com/users" 같은 형태로 제공됩니다. 엔드포인트에 따라 데이터를 요청하거나 특정 동작을 수행할 수 있습니다.

2. 메서드 (Method)

API는 주로 HTTP 프로토콜을 사용하며, HTTP 메서드를 통해 각 요청의 목적을 명확히 합니다.
GET: 데이터를 가져올 때 사용합니다.
POST: 새로운 데이터를 생성할 때 사용합니다.
PUT: 기존 데이터를 업데이트할 때 사용합니다.
DELETE: 데이터를 삭제할 때 사용합니다.
이러한 메서드들은 엔드포인트와 함께 요청의 의도를 나타내며, 각 엔드포인트가 어떤 메서드를 지원하는지에 따라 호출 방식이 달라집니다

3. 헤더 (Header)
API 요청과 응답에는 HTTP 헤더가 포함되며, 여기에는 인증 정보, 콘텐츠 타입, 캐싱 옵션 등 다양한 추가 정보가 담깁니다.
특히 인증 토큰을 통해 보안을 유지하는 API의 경우, 헤더에 인증 토큰을 포함하여 서버에 사용자 권한을 증명합니다.

4. 페이로드 (Payload)
POST, PUT 요청 시 함께 전송되는 데이터입니다. 일반적으로 JSON, XML과 같은 포맷으로 데이터가 전송되며, 서버는 이 데이터를 읽고 요청에 맞는 작업을 수행합니다.

5. 응답 (Response)
API 서버는 클라이언트의 요청에 대한 응답을 반환합니다. 응답은 주로 JSON 또는 XML 형태로 구성되며, 상태 코드와 함께 응답됩니다.
200 OK: 
요청이 성공적으로 처리되었음을 의미합니다.

201 Created: 새로운 리소스가 성공적으로 생성되었음을 나타냅니다.
400 Bad Request: 요청이 잘못되었거나 형식에 문제가 있음을 의미합니다.
401 Unauthorized: 인증 정보가 잘못되었거나 누락되었음을 나타냅니다.
404 Not Found: 요청한 리소스가 존재하지 않음을 의미합니다.
500 Internal Server Error: 서버에서 문제가 발생했음을 나타냅니다.

API 호출 구조
GET /api/v1/users/123 HTTP/1.1
Host: api.example.com
Authorization: Bearer YOUR_ACCESS_TOKEN

HTTP 메서드는 GET으로, 서버에서 데이터를 가져오기 위한 요청입니다.
엔드포인트는 /api/v1/users/123이며, 이 API는 ID가 123인 사용자 정보를 반환합니다.
Authorization 헤더를 통해 클라이언트는 인증 토큰을 서버에 전달하여 사용 권한을 증명합니다.

서버가 요청을 처리하면, 응답으로 다음과 같은 JSON 데이터를 반환할 수 있습니다:

{
  "id": 123,
  "username": "exampleUser",
  "email": "user@example.com"
}

여기서 서버는 200 OK 상태 코드와 함께 사용자 정보를 반환하며, 클라이언트는 이 정보를 통해 사용자 데이터에 접근할 수 있습니다.

API의 주요 종류와 사용 사례:
REST API (Representational State Transfer API)
REST API는 
가장 널리 사용되는 API 디자인 패턴으로, 리소스 기반 URL 구조를 사용하며, HTTP 메서드(GET, POST 등)를 통해 작업을 수행합니다.
URL 경로와 HTTP 메서드로 요청을 간단하고 직관적으로 표현할 수 있으며, 네트워크에서 효율적이고 쉽게 확장 가능한 방식입니다.

SOAP API (Simple Object Access Protocol API)
SOAP는 XML 형식의 메시지와 표준화된 프로토콜을 사용하는 API로
, 보안이나 트랜잭션이 중요한 엔터프라이즈 환경에서 주로 사용됩니다. REST보다 무겁지만, 강력한 메시지 구조와 보안 기능을 갖추고 있어 금융, 정부, 의료 분야에서 많이 사용됩니다.

GraphQL API
GraphQL은 페이스북에서 개발한 API 언어로, 
클라이언트가 정확히 필요한 데이터만 요청하고 받을 수 있게 해줍니다. 이를 통해 오버페칭(필요 이상의 데이터 요청)과 언더페칭(불충분한 데이터 요청) 문제를 해결합니다.

API의 활용 예
소셜 미디어 API: 
Facebook, Twitter 등의 SNS에서 로그인을 하거나 사용자 데이터를 가져오는 경우 API를 사용합니다.
지도 서비스 API: 
구글 지도 API는 특정 위치에 대한 정보, 길 안내, 거리 계산 등의 기능을 제공합니다.
결제 API: PayPal, Stripe와 같은 결제 서비스에서 결제를 처리하거나 트랜잭션 내역을 관리하는 데 사용됩니다.
데이터 통합: 여러 소스에서 데이터를 수집해 하나의 애플리케이션에서 보여줄 때 API가 사용됩니다. 예를 들어, 뉴스 앱은 다양한 뉴스 소스를 통합하여 보여줄 수 있습니다.


사전 학습 모델
사전 학습 모델(pre-trained model)은 이미 방대한 데이터셋을 활용해 특정 작업에 대해 학습이 완료된 인공지능(AI) 모델을 의미합니다. 이런 모델들은 주로 텍스트, 이미지, 음성 등 특정 유형의 데이터를 사전에 학습하여, 사전 학습 모델은 대부분 심층 신경망을 기반으로 하며, 언어 모델이나 이미지 인식 모델 등에서 자주 활용됩니다.

주요 개념들
초기 학습(Pre-training): 사전 학습 모델은 대량의 데이터를 바탕으로 초기 학습을 수행합니다. 이 과정에서 모델은 텍스트나 이미지의 특성을 추출하고, 일반적인 패턴과 규칙을 학습합니다. 예를 들어, 언어 모델의 경우에는 대규모 텍스트 데이터를 통해 단어 간의 관계나 문법적 구조를 학습합니다.

파인튜닝(Fine-tuning): 사전 학습된 모델은 기본적인 작업에 대한 이해를 갖추고 있지만, 특정한 도메인이나 세부 작업에 맞추기 위해 추가로 학습해야 하는데, 이를 파인튜닝이라고 하는데, 사전 학습된 모델을 해당 작업에 특화된 데이터로 추가 학습하여 더 높은 성능을 발휘할 수 있게 합니다.
예를 들어, 사전 학습된 언어 모델을 의료 텍스트 분석에 활용하고 싶다면, 의료 분야의 문서로 추가 학습해 특정 도메인 지식을 반영할 수 있습니다.

필요성
사전 학습 모델은 다음과 같은 이유로 인공지능 연구 및 실무에서 중요한 역할을 합니다:

대규모 데이터 학습: 
처음부터 학습시키기에는 데이터가 부족하거나 너무 방대할 경우, 사전 학습된 모델을 활용하면 이미 학습된 지식을 가져다 쓰기 때문에 빠르게 성능을 발휘할 수 있습니다.

자원 절약: 
대규모 데이터셋을 사용하여 모델을 처음부터 학습하는 데는 상당한 컴퓨팅 자원과 시간이 소요됩니다. 사전 학습된 모델을 사용하면 이를 절약할 수 있습니다.

효율적 확장성: 
사전 학습된 모델은 새로운 도메인이나 작업에 대해 비교적 쉽게 파인튜닝할 수 있어, 다양한 문제에 적용할 수 있습니다.

사전 학습 모델의 작동 방식
사전 학습 모델은 전이 학습(Transfer Learning)의 개념에 기반합니다. 사전 학습 단계에서 모델은 저수준의 특성을 학습하고, 이를 바탕으로 더 고수준의 특성을 추출할 수 있는 능력을 얻습니다. 이를 통해 새로운 작업에서도 빠르게 학습할 수 있는 능력을 가지게 되며, 새로운 데이터를 조금만 사용해도 고성능을 발휘할 수 있습니다.

저수준 특성: 
텍스트의 경우 문장 구조와 단어 간 관계, 이미지의 경우 엣지나 패턴 같은 기본적 특성을 학습합니다.
고수준 특성: 
NLP의 경우 문맥 이해, 감정 파악 등 고차원적인 특성을 학습하며, 이미지의 경우 객체 인식 등 더 구체적인 분석을 가능하게 합니다.

사전 학습 모델을 사용하는 방법
사전 학습 모델은 주로 다음과 같은 방식으로 사용됩니다:
파인튜닝: 사전 학습된 모델의 상위 레이어(주로 마지막 레이어)를 새롭게 학습하여, 특정 작업에 맞춘 모델로 변형합니다.

기능 추출: 사전 학습된 모델에서 얻은 출력을 새로운 작업의 입력으로 활용하여, 기존 지식을 이용한 추가 학습을 진행합니다.

전이 학습: 사전 학습된 모델의 구조와 가중치를 그대로 사용하여 새 데이터에 대한 학습을 진행합니다.

파인 튜닝
파인튜닝(fine-tuning)은 사전 학습된 모델을 특정 목적이나 도메인에 맞추기 위해 추가적인 맞춤 학습을 수행하는 과정입니다. 사전 학습된 모델은 주로 다양한 일반적인 데이터셋에서 학습되기 때문에, 이미 일반적인 패턴이나 특성을 잘 이해하고 있습니다. 그러나 특정 작업, 예를 들어 의학적 진단이나 법률 텍스트 분석처럼 특정한 도메인 지식을 요구하는 경우, 파인튜닝을 통해 해당 분야에 더 특화된 모델로 발전시킬 수 있습니다. 이를 통해 기존의 모델이 처리하지 못하는 세부적인 부분까지 학습하게 되어 더 높은 정확도를 가지게 됩니다.

필요성
사전 학습된 모델은 범용적인 데이터로 학습되었기 때문에, 대체로 다양한 유형의 입력을 이해하는 기초적인 능력을 갖추고 있습니다. 하지만 특정 분야나 작업에서 요구되는 세밀한 규칙이나 도메인 특성은 사전 학습 데이터만으로 충분히 반영되지 않을 수 있습니다. 

예를 들어, 이미지 분류 모델을 개발할 때 일반적인 객체 인식(고양이, 개, 자동차 등)에 대해 학습된 모델이 있다고 해도, 이를 의료 이미지로 사용하려면 암세포를 구분하거나 특정 질병의 징후를 식별할 수 있는 의료적 지식을 학습하는 과정이 필요합니다. 파인튜닝은 이와 같은 구체적이고 전문적인 정보를 학습하여, 기존 모델을 새로운 용도에 맞게 조정하는 데 사용됩니다.

파인튜닝의 단계
파인튜닝은 사전 학습된 모델의 능력을 바탕으로 전이 학습(Transfer Learning)을 적용하여, 새로운 데이터에 맞게 추가 학습하는 일련의 단계로 이루어집니다. 각 단계는 학습 방식과 모델 구조에 따라 조금씩 다를 수 있으나, 전반적인 흐름은 다음과 같습니다:

사전 학습된 모델 불러오기:
파인튜닝의 첫 단계는 사전 학습된 모델을 불러오는 것입니다. 이 모델은 일반적인 데이터로 학습되어 기본적인 패턴 인식이나 일반적인 지식을 이미 갖추고 있습니다.
예를 들어, 자연어 처리의 BERT 모델은 언어의 문맥을 이해할 수 있으며, 이미지 인식의 ResNet 모델은 기본적인 이미지 특성을 이미 학습한 상태입니다.

모델 구조 조정:
사전 학습된 모델을 파인튜닝할 때, 특정 작업에 맞게 모델의 구조를 조정해야 하는 경우가 많습니다.
일반적으로 사전 학습된 모델의 마지막 출력 계층(보통 클래스 분류를 담당하는 레이어)을 새로운 작업에 맞게 새로운 계층으로 교체하거나, 추가적인 레이어를 덧붙여서 원하는 형태로 수정합니다.
예를 들어, 이미지 분류 모델에서 고양이와 개만 구분하던 모델을 추가로 다른 동물까지 구분하도록 하려면, 마지막 출력층을 새롭게 구성하여 더 많은 클래스에 대해 학습할 수 있도록 합니다.

미세 조정(freezing and unfreezing):
파인튜닝을 할 때 모델의 모든 가중치를 조정하는 것이 아니라, 필요에 따라 일부 층의 가중치를 고정(freeze)하거나 조정 가능하게 풀어줍니다(unfreeze).
예를 들어, 초기층(low-level layers)은 주로 저수준 특성(텍스트에서는 단어 패턴, 이미지에서는 엣지 등)을 학습한 부분이므로 고정하고, 상위층(high-level layers)을 조정하여 구체적인 도메인 특성을 학습하도록 할 수 있습니다.
이러한 방식으로 학습하면 계산 비용을 줄일 수 있고, 이미 학습된 지식은 유지하면서 특정 작업에 필요한 특성만을 새롭게 학습할 수 있습니다.

학습률 조정(learning rate adjustment):
파인튜닝에서는 일반적인 학습 과정보다 더 작은 학습률(learning rate)을 사용하는 것이 일반적입니다.
이미 사전 학습된 가중치를 미세하게 조정하는 것이기 때문에, 너무 큰 학습률을 사용하면 기존의 지식을 망칠 수 있습니다.
따라서 미세한 조정을 위해 학습률을 낮춰서 특정 도메인에 맞는 세밀한 학습이 이루어지도록 합니다.

파인튜닝 및 최적화:
학습 데이터셋을 사용해 모델을 반복적으로 학습시키면서, 손실 함수(loss function)와 평가 지표(metric)를 통해 성능을 평가하고 최적화합니다.
여기서는 새로운 데이터에 맞게 조정된 모델의 가중치가 조금씩 업데이트되며, 모델이 새로운 작업의 세부적인 특성을 잘 학습하도록 합니다.

검증 및 평가:
파인튜닝을 마친 모델은 일반적으로 검증 데이터셋(validation dataset)을 사용하여 성능을 평가하며, 목표한 수준의 정확도를 달성하는지 확인합니다.
이 과정에서 모델의 일반화 성능을 확인하며, 특정 데이터에 과적합(overfitting)되지 않도록 주의합니다.

간단한 가상환경 설정 팁
먼저, 내가 무슨 버전들과 패키지들을 가지고 있는지 볼려면,
conda env export > conda_text.yml을 쓰자. 그런데 만약에 내가 새로운 가상환경을 만들고 안에 똑같은 패키지를 설정하고 싶으면, 저 yml파일을 그대로 가져다가 쓰면 된다.
conda env create -f conda_text.yml

먼저 conda_text는 처음 가상환경의 패키지를 들고 있는 정보기 때문에, 나중에 새로 만들 때, 처음 가상환경의 패키지, 이름까지 모두 가져온다.

여기까지...