안녕하세요, 돌아온 길잇(Gil-IT) 입니다. 오늘은 텐서(Tensor)에 대해서 알아보도록 하겠습니다.
텐서(Tensor)를 알아보기 전, 회사 일과 여러가지 프로젝트로 기술 관련 포스팅을 제대로 못한지 반년이 된 거 같네요.
마지막 기술 포스팅이 Flask + Maria DB 활용 홈페이지 만들기네요.
연초에는 일주일에 최소 1개라도 포스팅을 꼭 하자는 마음을 굳게 다짐했는데, 역시 쉽지 않네요. 꾸준히 쓰시는 분들 존경합니다.
이번 포스팅에서는 코로나 이후 어느 도메인에 가더라도 Main Topic인 AI와 관련된 이야기를 써보려고 합니다. 이 글을 읽어 보시는 분들도 인공지능, 데이터 분석, 데이터 사이언스 등 많이 들어보셨을 겁니다.
요즘은 지자체, 국비 무료 등 다양한 형태로 AI 관련 교육이 활성화 되어 있습니다. ChatGPT, 알파고 등 다양한 AI 소프트웨어가 세상에 등장하고 정말 현대사회는 “AI World” 입니다.
그렇다면 AI는 어떻게 만들어지는 걸까요?
인공지능(AI)의 학습 원리는 다양한 알고리즘과 접근 방식에 따라 달라질 수 있습니다. 그러나 일반적으로 머신러닝 및 딥러닝이 가장 대표적인 AI 학습 방법론입니다. 이하에 이러한 방법론들의 핵심 학습 원리를 간략하게 설명합니다
머신러닝(Machine Learning)
- 지도학습(Supervised Learning)
- 학습 데이터: 입력 데이터와 해당하는 출력 레이블의 쌍으로 구성됩니다.
- 목적: 주어진 입력에 대해 올바른 출력(레이블 또는 값)을 예측하는 모델을 학습합니다.
- 예시: 스팸 메일 분류, 주가 예측 등
- 비지도학습(Unsupervised Learning)
- 학습 데이터: 레이블이 없는 입력 데이터만으로 구성됩니다.
- 목적: 데이터의 숨겨진 구조나 패턴을 찾습니다.
- 예시: 클러스터링, 차원 축소 등
- 강화학습(Reinforcement Learning)
- 학습 데이터: 상태, 행동, 보상의 조합으로 이루어진 환경과의 상호작용을 통해 학습합니다.
- 목적: 누적 보상을 최대화하는 행동 정책을 학습합니다.
- 예시: 게임 플레이 최적화, 로봇 제어 등
딥러닝(Deep Learning)
- 인공신경망(Artificial Neural Networks)
- 여러 계층(layers)에 걸쳐 복잡한 함수를 근사(approximate)할 수 있습니다.
- 일반적으로 역전파(Backpropagation) 알고리즘을 사용하여 학습합니다.
- 합성곱 신경망(Convolutional Neural Networks, CNNs)
- 이미지 분류, 객체 탐지 등의 비전 문제에 특화된 딥러닝 모델입니다.
- 순환 신경망(Recurrent Neural Networks, RNNs)
- 시퀀스 데이터(예: 텍스트, 음성 등)를 처리하는 데 사용되는 신경망입니다.
학습 과정은 일반적으로 다음과 같은 단계를 거칩니다.
- 데이터 수집 및 전처리: 적절한 형태의 데이터를 수집하고, 모델 학습에 적합하게 변환합니다.
- 모델 구조 정의: 문제에 적합한 알고리즘과 신경망 구조를 선택합니다.
- 학습: 데이터를 모델에 입력하여 예측을 생성하고, 예측과 실제 값과의 차이(오차)를 계산하여 모델을 업데이트합니다.
- 평가: 별도의 테스트 데이터셋을 사용하여 모델의 성능을 평가합니다.
- 튜닝: 필요한 경우, 모델의 구조나 학습 파라미터를 조정하여 성능을 개선합니다.
이러한 과정을 통해, AI 모델은 특정 작업에 대해 좋은 성능을 보이는 ‘학습된’ 상태에 도달하게 됩니다.
그렇다면 AI는 무엇을 통해서 만드는 걸까요?
인공지능(AI)를 개발하는 데 사용되는 프레임워크는 다양하며, 각각의 특징과 사용 케이스에 맞게 설계되어 있습니다. 아래는 몇 가지 유명한 AI 프레임워크에 대한 간략한 소개입니다
머신러닝 프레임워크
- Scikit-learn
- 주로 지도학습과 비지도학습 알고리즘을 지원합니다.
- 사용하기 쉬운 API와 뛰어난 문서화가 있어 머신러닝 입문자에게 적합합니다.
- XGBoost, LightGBM
- 부스팅 알고리즘을 특화하여 제공합니다.
- 대용량 데이터셋에서도 높은 성능과 빠른 학습 속도를 보입니다.
- Weka
- 자바로 작성된 머신러닝 라이브러리입니다.
- 그래픽 사용자 인터페이스(GUI)를 제공하여 코드 작성 없이도 머신러닝 모델을 훈련시킬 수 있습니다.
딥러닝 프레임워크
- TensorFlow
- 구글이 개발한 오픈소스 딥러닝 프레임워크입니다.
- 확장성이 뛰어나고, 다양한 환경에서 사용할 수 있습니다.
- TensorFlow Lite, TensorFlow.js 등 다양한 환경에 적용할 수 있는 서브 프레임워크가 있습니다.
- PyTorch
- 페이스북이 개발한 오픈소스 딥러닝 프레임워크입니다.
- 동적 계산 그래프를 사용하여 개발과 디버깅이 쉽습니다.
- 연구 커뮤니티에서 널리 사용되며, 상용 애플리케이션에서도 점점 더 인기를 얻고 있습니다.
- Keras
- TensorFlow나 Theano, CNTK 등의 다른 딥러닝 프레임워크를 백엔드로 사용할 수 있습니다.
- API가 간단하고 사용하기 쉬워 프로토타이핑에 적합합니다.
- Caffe, Caffe2
- 특히 이미지 분류 등의 비전 문제에 특화된 프레임워크입니다.
- 배포에 용이하며, 실시간 애플리케이션에도 사용됩니다.
- MXNet
- 아마존 웹 서비스(AWS)에서 지원하는 딥러닝 프레임워크입니다.
- 다양한 프로그래밍 언어를 지원하며, 확장성이 높습니다.
- ONNX (Open Neural Network Exchange)
- 여러 딥러닝 프레임워크 간의 모델을 교환하기 위한 표준입니다.
- PyTorch, TensorFlow, MXNet 등 다양한 프레임워크에서 모델을 ONNX 형식으로 변환할 수 있습니다.
이 외에도 많은 특화된 프레임워크와 라이브러리들이 존재하며, 각 프로젝트의 필요에 따라 적절한 도구를 선택하는 것이 중요합니다.
텐서(Tensor)는 TensorFlow에서 사용하는 데이터 형태이며 텐서플로우는, 가장 많이 사용하는 AI 프레임 워크 중 하나 입니다.
텐서플로우, 많이 들어보셨을 겁니다. Tensor + Flow의 합성어 입니다.
텐서플로우 바로가기 <- 텐서플로우 홈페이지 입니다. 가서 다양한 정보를 확인해보세요.
그렇다면 Tensor는 무엇일까요?
텐서(Tensor)는 수학적으로 다차원 배열의 일반화된 형태로 볼 수 있습니다. 텐서는 스칼라, 벡터, 행렬 등을 포함하는 개념이며, 더 높은 차원으로 확장될 수 있습니다. 텐서는 머신러닝, 딥러닝, 이미지 처리, 자연어 처리 등 다양한 분야에서 기본 데이터 구조로 사용됩니다.
텐서의 기본 요소
- 차원(Dimension): 텐서의 차원은 텐서가 몇 개의 축(axis)으로 구성되는지를 나타냅니다. 예를 들어, 3차원 텐서는 3개의 축을 가집니다.
- 랭크(Rank): 텐서의 랭크는 텐서가 몇 차원인지를 나타내는 수입니다. 스칼라는 랭크가 0, 벡터는 랭크가 1, 행렬은 랭크가 2, 3차원 텐서는 랭크가 3이 됩니다.
- 모양(Shape): 텐서의 각 차원에 몇 개의 요소(element)가 있는지를 나타내는 튜플입니다. 예를 들어, 2×32×3 행렬의 모양은 (2,3)(2,3)이 됩니다.
- 데이터 타입(DataType): 텐서에 저장된 요소의 데이터 타입입니다. 예를 들어, 정수(int), 실수(float), 복소수(complex) 등이 될 수 있습니다.
텐서의 예시
- 0차원 텐서: 스칼라는 단일 숫자만으로 이루어진 0차원 텐서입니다.
- 55
- 1차원 텐서: 벡터는 숫자의 배열로 이루어진 1차원 텐서입니다.
- [1,2,3,4][1,2,3,4]
- 2차원 텐서: 행렬은 숫자가 행과 열로 구성된 2차원 텐서입니다.
- (1234)
(1324)
- (1234)
- 3차원 텐서 이상: 이보다 더 높은 차원의 텐서는 보통 다차원 배열로 나타냅니다.
텐서 연산
텐서에는 다양한 수학적 연산이 가능합니다.
- 요소별 연산(Element-wise Operations): 덧셈, 뺄셈, 곱셈 등
- 행렬 곱셈(Matrix Multiplication): 내적, 외적 등
- 차원 변환(Dimension Manipulation): 전치, 리쉐이프(Reshape), 슬라이싱(Slicing) 등
- 축에 따른 연산(Axis-wise Operations): 합계, 평균, 최댓값, 최솟값 등
- 브로드캐스팅(Broadcasting): 모양이 다른 텐서끼리 연산을 가능하게 하는 메커니즘
텐서(Tensor)는 텐서플로우(TensorFlow), 파이토치(PyTorch), 넘파이(NumPy) 등의 라이브러리에서 널리 사용됩니다.
이러한 라이브러리들은 텐서를 효율적으로 다룰 수 있는 다양한 도구와 API를 제공합니다.