0. 잘 정리가 된 글

 

https://www.itworld.co.kr/news/307189

 

“LLM 개발을 더 간편하게” 랭체인(LangChain)의 이해

대규모 언어 모델(LLM)을 위한 효과적인 프롬프트를 작성하는 데는 기술이 필요하지만 LLM 사용법은 대체로 간단하다. 반면 언어 모델을 사용한

www.itworld.co.kr

 

https://brunch.co.kr/@ywkim36/146?fbclid=IwZXh0bgNhZW0CMTEAAR319OC5XNzAqUsQQDLzkUkg4_FAlzEk85JcBZL4V933vq89KgkBd6tXnVE_aem_AUmRdSQ_sYdbSO6ij2orZen6qipd1K29FHRaqCBCcWfcJEGGjUUrKpUp0Rf3miV4pzbHoxc1UvIW_Pfm3rSGIbaw&mibextid=K35XfP

 

10분 만에 RAG 이해하기

AI의 새로운 핫 토픽 RAG(검색-증강 생성)를 설명해 드립니다. | 소프트웨어 산업에는 하루에도 수십 개의 새로운 약어와 개념이 등장합니다. 특히나 빠르게 변하는 AI 기술 같은 경우라면 더욱 말

brunch.co.kr

 

 

1. 모델 I/O는 프롬프트를 관리하고 공통 인터페이스를 통해 언어 모델을 호출하고 모델 출력에서 정보를 추출할 수 있게 해준다

 

2. 데이터 연결은 데이터를 로드, 변형, 저장 및 쿼리하기 위한 빌딩 블록을 제공한다

 

3. Chain : 구성 요소를 조합해서 하나의 파이프라인을 구성한다.

 

 

4. 메모리

메모리는 데이터를 저장하는 공간. 데이터는 대화과정에서 발생하는 데이터를 의미.
챕봇 앱은 이전 대화를 기억해야 하지만, LLM은 채팅 기록을 장ㅇ기적으로 ㅂ관하지 않는다. 

대화 내용은 다음과 같은 형태로 저장될 수 있다. 

  • Conversation Buffer: 그동안의 모든 대화를 저장한다. 대화가 길어질 수록 메모리 용량이 증가한다는 점이 단점이다.
  • Conversation Buffer Window: 마지막 k개의 대화만 저장한다. 최근 대화만 저장하기에 메모리 용량이 과도하게 늘어나지 않는다는 장점이 있지만, 이전 내용을 잊게 된다는 단점이 있다.
  • Conversation Summary: LLM을 사용하여 대화 내용을 요약하며 저장한다.
  • Conversation Summary Buffer: max_token_limit을 초과할 경우에 요약하여 저장한다. Buffer Window와 Summary의 결합이다.
  • Conversation Knowledge Graph: 대화 속 주요 entity를 추출해 지식 그래프(knowledge graph)를 생성한다.

 

https://blog.futuresmart.ai/langchain-memory-with-llms-for-advanced-conversational-ai-and-chatbots

 

Langchain Memory with LLMs for Advanced Conversational AI and Chatbots

Explore the concept and types of Langchain memory, and learn how to integrate it with Streamlit and OpenAI's GPT API to build smarter, context-aware chatbot

blog.futuresmart.ai

 

 

https://medium.com/@miloszivic99/finetuning-large-language-models-customize-llama-3-8b-for-your-needs-bfe0f43cd239#45a2

 

https://fornewchallenge.tistory.com/entry/LLAMA3-RAG-%EC%8B%9C%EC%8A%A4%ED%85%9C-AI-%EC%96%B4%EC%8B%9C%EC%8A%A4%ED%84%B4%ED%8A%B8%EB%A1%9C-10%EC%B4%88%EB%A7%8C%EC%97%90-%EC%9E%90%EB%8F%99-%EB%B3%B4%EA%B3%A0%EC%84%9C-%EB%A7%8C%EB%93%A4%EA%B8%B0?fbclid=IwZXh0bgNhZW0CMTEAAR0S8Jj99tNYS02OV2i9HzBarxXfl4JamgACqSXQO27rSIJnWXKk_Y2KQyE_aem_AbrBa-sw_OShDPaM50W1CAAOg7p3qiD7VFpHc9A-pH0hAGMtUV68D9iTlyVd0YJcLAyzZNXWPHcro8FZw4xPeHtu

 

LLAMA3 RAG 시스템: AI 어시스턴트로 10초만에 자동 보고서 만들기

안녕하세요! 오늘은 요즘 가장 인기 있는 언어 모델, LLAMA3로 AI 어시스턴트를 만들어 보겠습니다. 이 앱은 Groq과 Phidata를 이용해서 주어진 웹 사이트나 pdf를 기반으로 "원클릭" 보고서를 작성하고

fornewchallenge.tistory.com

 

'머신러닝 > RAG' 카테고리의 다른 글

1. Local LLM에 대하여  (0) 2024.04.12
0 환경 설정 - ollama 설치  (0) 2024.04.10

Implementing RAG using Langchain Ollama and Chainlit on Windows using WSL

https://medium.aiplanet.com/implementing-rag-using-langchain-ollama-and-chainlit-on-windows-using-wsl-92d14472f15d

 

Implementing RAG using Langchain Ollama and Chainlit on Windows using WSL

What is Ollama ?

medium.aiplanet.com

 

RUN LLMs locally

PrivateGPT,llama.cpp, Ollama, GTP4All, llamafile 과 같은 다양한 프로젝트에 대한 Overview

https://python.langchain.com/docs/guides/development/local_llms/

 

LangServe + Ollama

- ollama를 통해  OpenModel를 서버에 설치하고, Remote에서 Chain을 호출한다. 한글 모델(야놀자 제공,heegye님이 변환, Teddy님의 공개 강좌)

- '24 4/12부터 이 구조를 사용하고 개발 진행함..

- Teddy님의 소개 자료 https://github.com/teddylee777/langserve_ollama?tab=readme-ov-file 

 

 

 

Ollama model 받기

1.  Hugging Face에서 받기

 

# 1. https://huggingface.co/asiansoul/KoDolph-2x8b-GGUF 에서
# 2. kodolph-2x8b-Q8_0.gguf 모델을 받는 다고 가정한다.

#1. Model 다운로드 사용법
huggingface-cli download \
  asiansoul/KoDolph-2x8b-GGUF \           #hugging face의 URL이다.
  kodolph-2x8b-Q8_0.gguf \                # files and version dir에서 받고 싶은 모델이다.
  --local-dir 본인의_컴퓨터_다운로드폴더_경로 \
  --local-dir-use-symlinks False
  
 #예시
 
 huggingface-cli download \
> asiansoul/KoDolph-2x8b-GGUF \
> kodolph-2x8b-Q8_0.gguf \
> --local-dir /workspace/home/hankh/langserve_ollama/ollama-modelfile/LLAMA3-Ko-Instruct --local-dir-use-symlinks False

#2. Modelfile 설정
#Model파일을 만들거나 Get한다. kodolph-2x8b-Q8_0.gguf는 친절하게 Modelfile_Q5_K_M 파일을 제공한다.
#내용은 확인하세요

#3. Ollama 모델 등록
ollama create Llama3-KoDolph -f ./Modelfile_Q8_K_M

#4 Ollama List 확인

ollama list

NAME                    	ID          	SIZE  	MODIFIED
EEVE-Korean-10.8B:latest	c3ebb32b93a5	7.7 GB	2 days ago
Llama3-KoDolph:latest   	915768bf8359	8.5 GB	11 seconds ago
gemma:7b-instruct       	a72c7f4d0a15	5.0 GB	12 hours ago

#5 Ollama 실행

ollama run Llama3-KoDolph

 

'머신러닝 > RAG' 카테고리의 다른 글

LLM 개발을 더 간편하게 랭체인의 이해  (0) 2024.04.14
0 환경 설정 - ollama 설치  (0) 2024.04.10

 

 

1. Install Ollama - 로컬에서 무료로 사용할 수 있는 LLM 도구, Ollama 활용 가이드


 - Ollama는 로컬에서 대형 언어 모델(LLM)을 쉽게 사용할 수 있도록 지원하는 플랫폼입니다. macOS, Windows(WSL2를 통한 설치 가능), Linux에서 간편하게 설치할 수 있으며, Docker를 지원하여 더욱 다양한 환경에서 활용 가능합니다. Ollama는 ollama run llama2와 같은 간단한 명령어로 빠르게 AI 모델과 상호작용할 수 있습니다. Llama 2, Mistral, Vicuna, LLaVa 등의 다양한 오픈 소스 모델을 지원하며, 사용자는 이들 중 필요한 모델을 선택하여 사용할 수 있습니다. 자세한 내용은 Ollama 공식 웹사이트에서 확인하실 수 있습니다.

 - Installation on Linux https://github.com/ollama/ollama/blob/main/docs/linux.md
 - # Run the most popular AI model among open licenses
     ollama run mistral
 참고 자료 : https://anpigon.tistory.com/434  

 

실해예시

 

-Ollama WebUI 설치 하기 

터미널 작업은 귀찮다. Web으로 제공된다. 참으로 대단한 사람들이 많다.

#리눅스 환경, NVIDIA GPU 사용한다. port를 설정하면 웹포트를 설정할 수 있다. 기본 포트는 3000
# Docker build
run-compose.sh --enable-gpu --webui[port=xxxx] --build
# Docker 실행
run-compose.sh --enable-gpu --webui[port=xxxx]

참고 자료  https://docs.openwebui.com/getting-started/

 

실행결과

그러나 '24 4/11부터 LangServe를 알게 된 이후부터 사용안함..

 

- LangServer + Ollama

 

(hankh) [hankh@tb-eipms-tau1 app]$ pwd
/workspace/home/hankh/langserve_ollama/app
(hankh) [hankh@tb-eipms-tau1 app]$ python server.py

 

도움 받은 글 : https://github.com/teddylee777/langserve_ollama?tab=readme-ov-file

 

 

- 랭체인으로 LLM기반의 AI서비스 개발하기

요즘 읽고 있는책이며, 소스는 아래 링크 참조

OpenAI대신 langserve_ollama로 변환하면서 적응하기...(아..가난뱅이)

https://github.com/gilbutITbook/080413

 

GitHub - gilbutITbook/080413: <랭체인으로 LLM 서비스 만들기> 소스 코드

<랭체인으로 LLM 서비스 만들기> 소스 코드. Contribute to gilbutITbook/080413 development by creating an account on GitHub.

github.com

 

2. ChatGPT를 대신하는 Ollam LLM,Chat

최종 하려는 것은 유료 OpenAI사의 Chat, LLM 대신 Ollam를 통해 무료 model을 사용한다. 유료보다는 떨어지겠지만..

LangChain학습하는데는 충분하지 않을까...

 

1. LLM모델

%config Completer.use_jedi = False  # JupyterNotebook에서 도움말 얻기..

from langchain_community.llms import Ollama
llm = Ollama(model="EEVE-Korean-10.8B")

 

2. Chat모델

# OpenAI대신 Ollama를 호출해서 학습을 한다.
# from langchain_openai import ChatOpenAI
# llm = ChatOpenAI()

from langchain_community.chat_models import ChatOllama
chatLlm = ChatOllama(model="EEVE-Korean-10.8B")

 

3. Embedding

embedding에 사용되는 모델은 좀 더 확인을 해보자

from langchain_community.embeddings import OllamaEmbeddings
embeddings = OllamaEmbeddings(model = 'EEVE-Korean-10.8B')  ## OpenAI 임베딩 대신 Ollama를 사용한다

 

 

3. NVIDIA GPU 보는법 

  • nvidia-smi
  • watch -n 1 nvidia-smi

 

https://velog.io/@claude_ssim/NVIDIA-GPU-%EB%B3%B4%EB%8A%94%EB%B2%95nvidia-smi

'머신러닝 > RAG' 카테고리의 다른 글

LLM 개발을 더 간편하게 랭체인의 이해  (0) 2024.04.14
1. Local LLM에 대하여  (0) 2024.04.12

 

로직을 프로그래밍을 해야 하는 기존 방식과 달리, 머신 러닝은 결과 데이타를 이용하여 어떠한 추론 방식을 제공한다.

 

 

가장 기초적인 y=mx + b 모델의 선형회귀는 기울기(m), 절편(b)을 데이타로 부터 학습을 하게 된다. 다음 그림은 머신러닝의 일반적인 framwork이다.

1. forword pass : 임의의 m,b로 시작하여, 예측값 y_hat을 구한다.

2. cost 계산 : 예측값 y_hat 과, 실제값 y에 대한 cost 값을 구한다. 여기서 중요한 것은 모델에 따라 사용되는 cost 함수가 무엇인지 알고는 있어요 한다. 회귀에서는 MSE를 사용한다.

3. backward pass : chain rule을 이용하여, 파라미터인, m,b를 수정한다.

4. (3)을 이용하여, cost 값이 적어지는 방향으로 m,b를 적용한다. (1)의 단계로 진행한다. m,b는 (3)에서 사용하는 값을 사용한다.

 

 

아래 그림과 같은 데이타가 존재하고, 임의의 m, b로 시작한다고 가정을 한다.

 

cost가 적어지는 m,b를 chain rule을 이용하여 구하고, 이를 반복한다. 아래예는 1,000을 수행하고 있다.

Epoch 0, cost 8.57, m grad 23.2, b grad 3.6
Epoch 1, cost 4.08, m grad 14.8, b grad 1.91
Epoch 2, cost 2.25, m grad 9.49, b grad 0.831
Epoch 3, cost 1.51, m grad 6.11, b grad 0.15
Epoch 4, cost 1.2, m grad 3.96, b grad -0.28
Epoch 5, cost 1.07, m grad 2.59, b grad -0.552
Epoch 6, cost 1.01, m grad 1.72, b grad -0.723
Epoch 7, cost 0.981, m grad 1.17, b grad -0.829
Epoch 8, cost 0.962, m grad 0.82, b grad -0.894
Epoch 9, cost 0.948, m grad 0.595, b grad -0.934
Epoch 10, cost 0.936, m grad 0.452, b grad -0.957
Epoch 11, cost 0.925, m grad 0.361, b grad -0.969
Epoch 12, cost 0.915, m grad 0.302, b grad -0.975
Epoch 13, cost 0.904, m grad 0.265, b grad -0.977
Epoch 14, cost 0.894, m grad 0.241, b grad -0.976
Epoch 15, cost 0.884, m grad 0.225, b grad -0.973
Epoch 16, cost 0.874, m grad 0.214, b grad -0.969
Epoch 17, cost 0.864, m grad 0.207, b grad -0.965
Epoch 18, cost 0.854, m grad 0.202, b grad -0.96
Epoch 19, cost 0.845, m grad 0.199, b grad -0.955
Epoch 20, cost 0.835, m grad 0.196, b grad -0.95
Epoch 21, cost 0.826, m grad 0.194, b grad -0.945
Epoch 22, cost 0.817, m grad 0.192, b grad -0.939
Epoch 23, cost 0.808, m grad 0.191, b grad -0.934
Epoch 24, cost 0.799, m grad 0.189, b grad -0.929
...
Epoch 996, cost 0.0195, m grad 0.000685, b grad -0.00337
Epoch 997, cost 0.0195, m grad 0.00068, b grad -0.00335
Epoch 998, cost 0.0195, m grad 0.000677, b grad -0.00333
Epoch 999, cost 0.0195, m grad 0.000673, b grad -0.00331

 

이를 통해... 적절한 m,b를 구하게 된다.

 

머신러닝을 다시 공부할 때

  • 모델의 정의
  • 모델에 사용되는 cost function

도 같이 공부 필요하다

 

'머신러닝 > 기초수학 for ML' 카테고리의 다른 글

1. 선형대수학에 대한 단상  (0) 2024.03.02

 

기본 입자는 표준 모형으로 일목 요연하게 정리된다. 이 이론의 놀라운 점은 지독하게 수학적이라는 점이다(대부분의 물리 이론이 수학적이다). 표준 모형을 통해 물리학자는 우주가 얼마나 수학적인지 다시 한번 깨닫는다. 
... 하늘과 바람과 별과 인간 중에서

 

1. 시작하면서

 

머신러닝을 공부하게 되면서 행렬과 미분이 알고리즘으로 사용된다는 것을 느끼면서, 전산의 역활이 과연 무엇일까 좌절 아닌 좌절을 하고 있을 때, 나름 위안을 삼았던 문구이다.. 

 

회귀분석에 사용되는 선형 방정식도, overfitting를 방지하기 위한 L2, L1 규제, 많은 데이타를 압축하기 위한 주성분 분석 등도 선형대수학에 나오는 개념들이다. 선형 대수학이 응용되는 사례는 그림1을 보자..

그림1. 선형대수학의 응용분야

 

혼자 공부하는 머신러닝/딥러닝을 공부하다가 나오다 마주치게 된 주성분 분석.... 목적은 차원 축소인데... 잘 이해가 안된다... 지금 보니 이해가 안되는 것이 당연하다.. 선형대수학의 마지막(??)에 나오는 이야기가 SVD 이다.. SVD를 이해하기 위해서는 소거법, 아이젠 벡터를 이해하고, 그것들이 단점을 이해해햐 하니....

 

그림 2는 선형대수학의 학습 순서이고, 이들의 제약사항이 기술 되어 있다. 우리의 데이타는 n*n도 아니고, 역치가 존재하지 않고, 대각행렬도 아닌 일반적인 데이타이니, SVD를 사용하게 된다... (...중간에 포기하지 마시라)

 

그림 2. 딥러닝을 위한 선형대수학

 

2. SVD의 응용 사례

3,024* 4,032Pixe의 데이타가 아래 그림과 같이 있다고 하자..

sigular vector를 1,2,4,8,16,32,64개 추가하였을때의 변화는 아래 그림과 같다.

  n=1 n=2 n=4 n=8 n=16 n=32 n=64
 

 

sigular vector가 64개이면 원본과 비슷하게 된다.

 

원본 그림 (A)는 3,024* 4,032의 크기인데... SVD로 분해하면.. 64*4,032 + 64 + 64*3,024로 줄어들게 된다... 와우!!!

(SVD 보면서 정말 감탄을 하였다당..)

 

그 어려운 SVD 계산도 ..라이브러리를 써서 한줄로 계산한다... 두번째 와우!!!

                            U, sigma, V = np.linalg.svd(imgmat)

#아무이미지를 블러오고
img = Image.open('oboe-with-book.jpg')

#gray로 변환하고
imggray = img.convert('LA')

#numpy mattrix로 변환하고
imgmat = np.array(list(imggray.getdata(band=0)), float)
imgmat.shape = (imggray.size[1], imggray.size[0])
imgmat = np.matrix(imgmat)

#SVD로 분해한다.
U, sigma, V = np.linalg.svd(imgmat)

# singlua vector를 늘려준다.
for i in [2, 4, 8, 16, 32, 64]:
    reconstimg = np.matrix(U[:, :i]) * np.diag(sigma[:i]) * np.matrix(V[:i, :])
    plt.imshow(reconstimg, cmap='gray')
    title = "n = %s" % i
    plt.title(title)
    plt.show()

 

그림생성하는 Stable Diffusion의 동작 원리도 Unet Step이 증가할 때마다 최초 노이즈에서 그림으로 완성이 되는데.. Step의 증가가 single vector가 추가 되는 것이 아닐까?? 개인적인 생각임다...ㅋ

https://jalammar.github.io/illustrated-stable-diffusion/

 

 

PCA의 활용은 차원 축소라 이야기한다.. 행렬의 직관적인 의미는 음... 숫자 하나가 소인수 분해가 되어.. 인수를 찾듯이.. 행렬도 인수분해한다.. 행렬의 성격에 따라, eigen value, sigluar value라는 값으로 인수분해한다... 인수 분해 해서.. 인수를 활용한다 정도의 의미를 부여하면 되지 않을까...

(eigen ,, 독일어로 성질의 뜻.. sigular 영어의 성질의 뜻 내포..)

 

수학은 참으로 일반적이고 어려운  학문이다.. 나처럼 목적이 뚜렷한 사람에게 그 용도를 한정시키면  수학이 필요하구나 느끼고 재미 또한 느끼게 된다. 또한...이 어려운 것을 처음으로 활용한 선구자를 존경까지 하게 된다..

 

3. 참고하면 좋을 자료

1. https://github.com/jonkrohn/ML-foundations

 

GitHub - jonkrohn/ML-foundations: Machine Learning Foundations: Linear Algebra, Calculus, Statistics & Computer Science

Machine Learning Foundations: Linear Algebra, Calculus, Statistics & Computer Science - jonkrohn/ML-foundations

github.com

선형대수 기본 개념과  numpy, 파이토치, tensorflow를 이용하여 설명을 해주는데... 강의 좋네요...나는 udemy로 수료

 

 

2. 개발자를 위한 실전 선형대수학

정리겸 보고 있는 도서

 

 

3. https://www.youtube.com/watch?v=fNk_zzaMoSs&t=6s 이것도 많이 추천을 하는군요..

3. https://angeloyeo.github.io/2019/09/08/LHopital_rule.html

 

로피탈 정리의 기하학적 의미 - 공돌이의 수학정리노트 (Angelo's Math Notes)

 

angeloyeo.github.io

 

4. 머신러닝·딥러닝에 필요한 기초 수학 with 파이썬 도서 코드

대학 교재도 번역본도 아닌 집필 도서가 3판까지 나왔다고 해서 보기 시작하고 있는 책

https://github.com/metamath1/noviceml

 

GitHub - metamath1/noviceml: 도서 머신러닝·딥러닝에 필요한 기초 수학 with 파이썬의 예제 코드와 그래

도서 머신러닝·딥러닝에 필요한 기초 수학 with 파이썬의 예제 코드와 그래프 그리는 코드 및 웹앱 저장소 - GitHub - metamath1/noviceml: 도서 머신러닝·딥러닝에 필요한 기초 수학 with 파이썬의 예제

github.com

 

https://velog.io/@data_buddha/series/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D%EB%94%A5%EB%9F%AC%EB%8B%9D%EC%97%90-%ED%95%84%EC%9A%94%ED%95%9C-%EA%B8%B0%EC%B4%88%EC%88%98%ED%95%99-with-%ED%8C%8C%EC%9D%B4%EC%8D%AC

 

velog

 

velog.io

 

5. 머신 러닝 관련 주제 정리글

(2)의 저자가 정리하고 있는 글 깔끔하게 정리한다.. 소스를 보면 어렵다..

 

https://github.com/metamath1/ml-simple-works

 

GitHub - metamath1/ml-simple-works

Contribute to metamath1/ml-simple-works development by creating an account on GitHub.

github.com

 

 

 

폰트를 지정하는 두가지 방법

matplotlib에서 폰트를 지정하여 출력하는 하는 대표적인 방법은 크기 두 가지이다.

  1. 텍스트 출력시 폰트 특성을 지정: FontProperties 속성으로 폰트 속성을 지정
  2. 전역으로 지정: rcParams 을 사용하여 전역으로 설정값을 지정
  3. 폰트가 보이지 않으면 캐쉬 삭제한다.

1. FontProperties 속성

os마다 디렉토리 설정이 헷갈린다. 설치되어 있는 폰트위치를 확인하고 한글 폰트를 지정하는 법을 확인한다.

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
from mpl_toolkits import mplot3d
import matplotlib.font_manager as mfm

# 설치된 폰트 및 디렉토리 확인
font_list = mfm.findSystemFonts(fontpaths=None, fontext='ttf')
font_list[:10]

 

font-list에 대한 출력

['C:\\Windows\\Fonts\\micross.ttf',
 'C:\\Windows\\Fonts\\ERASMD.TTF',
 'C:\\Windows\\Fonts\\comic.ttf',
 'C:\\Windows\\Fonts\\H2PORM.TTF',
 'C:\\Windows\\Fonts\\HanSantteutDotum-Bold.ttf',
 'C:\\Windows\\Fonts\\couri.ttf',
 'C:\\Windows\\Fonts\\seguibli.ttf',
 'C:\\Windows\\Fonts\\BAUHS93.TTF',
 'C:\\Windows\\Fonts\\RAGE.TTF',
 'C:\\Windows\\Fonts\\Pyidaungsu-1.8.3_Numbers.ttf']

 

폰트 설정

# 구글 colab 환경일 경우 그래프에 한글 폰트 사용을 위한 설정
# path = 'noviceml/font/NanumBarunGothic.ttf'
# fontprop = mfm.FontProperties(fname=path, size=18)

# 로컬 환경일 경우 그래프에 한글 폰트 사용을 위한 설정
# https://financedata.github.io/posts/matplotlib-hangul-for-ubuntu-linux.html
# 아래 코드의 주석 제거 후 경로를 유저 컴퓨터의 폰트 파일 경로로 수정하세요.
# path = '/usr/share/fonts/truetype/nanum/NanumBarunGothic.ttf'
# fontprop = mfm.FontProperties(fname=path, size=18)

path = 'C:\\Windows\\Fonts\\NanumBarunGothic.ttf'
fontprop = mfm.FontProperties(fname=path, size=18)

 

폰트가 없다면...설

NanumBarunGothic.ttf
3.99MB

 

2. 전역으로 지정: rcParams 

font.family에 설정한다.

import matplotlib.pyplot as plt
from sklearn.tree import plot_tree

#font.family에 설정
plt.rcParams['font.family'] ='Malgun Gothic'

 

 

나에게 설치된 font.family는 어떤것이 있는지 확인하는 코드

import matplotlib.font_manager
from IPython.core.display import HTML

def make_html(fontname):
    return "<p>{font}: <span style='font-family:{font}; font-size: 24px;'>{font}</p>".format(font=fontname)

code = "\n".join([make_html(font) for font in sorted(set([f.name for f in matplotlib.font_manager.fontManager.ttflist]))])

HTML("<div style='column-count: 2;'>{}</div>".format(code))

 

3.폰트 캐쉬 삭제

폰트가 안보이면...캐쉬를 삭제해 보자..

import shutil
import matplotlib as mpl
print(f'캐시 디렉토리: {mpl.get_cachedir()}')
shutil.rmtree(matplotlib.get_cachedir())

[ 목차 ]

     

    1. 들어가기 전에

    시간은 빨리가도 월급날은 더디온다.. 혼공머신을 공부한 6주는 월급날 보다 더 긴 느낌이다. TT

     

    책장속에 책을 볼 때다. 책을 주문할 때의 열정은 어디 갔는지.. 봐야지 봐야지 생각은 있는데... 내일 봐야지 내일 봐야지... 미루 둔 것이 어언 2년이 흘렀다. 작년 23년 6월에 본 혼공학습단 모집... 선정이 되었지만... 안했다...아니 못했다..

    OO님, 혼공학습단 10기에 선정되신 것을 축하드립니다! 안내 사항을 확인해 주세요.

     

    연말에 다시 모집 메일을 보면서..... 미안하면서도 이 번에 꼭 끝내리라 ... 1번의 공수표는 있어도 2번은 없다.. 맘 속 다짐을 한다.

    [한빛미디어] OO님, 혼공학습단 11기에 오신 것을 환영합니다!

     

    2. 시작하기전 내 맘속의 다짐.

    다음 2가지를 꼭 실천하리라 다짐을 하고 시작을 하였다.. 

    • 토요일 까지 학습한 것을 Posting 한다...이를 위해서는 금요일 부터 시작해야 한다.
    • 쉴 때 못 쉬고,, 운동할 것 못하고,.. 시간을 내는 만큼 집중해서 보자..

    지금까지 일 하듯..큰 뼈대를 먼저 잡은 후에 세부적인 내용은 천천히 이해하는 방식으로 진행을 하였다..

     

    3. 공부 하면서 얻은 것  

    • 6번 금요일 또는 토요일 올리고.. 지각을 안했다!!!와우!!.... 아..나도 한다면 한다!!
    • 미션을 하기 위해서 책을 열심히 봤다. 잘 이해안되는 것은 인터넷을 활용하여 어느 정도 이해가 될 수 있었다.
      • 모델의 주요 개념, 모델의 속성을 이해했다.
      • 책에 나온 소스의 주요 방법론을 이해했다.
      •  Scikit-learn, numpy등의 라이브러리를 이해했다. numpy의 행렬변환이 어려웠었는데 많이 편해 졌다.
      • 이해를 위해 책을 활용하여, 나름 확장하여 이것 저것 시험을 해봤다... Decision Tree의 Gini 계수 결정을 안 잊어버릴 것 같다..족장(리더)님의 열정에 자극 받아...아.... 해결했을 때의 쾌감!!!!
    • 정리 글은 항상 책을 다 보고 머리에 정리해서 큰 클을 만들고, 필요 부분은 책을 보면서 정리를 해 나갔다..(나름 뿌듯!!)

    4. 혼공 학습단에 참가하면서  얻은 것

    • 족장님의 응원, 열정, 관심을 보면서 6주간을 학습한 것 같다
      • 그 많은 혼공족의 게시글을 읽은 후에 답변을 다는 것을 보고 오!! 그대야 말로 정말 프로페셔널이군요... 그렇담 나도 열심히 해야 겠군... 생각하며 진행했던 것 같다.
      • 4주차 Decision Tree를 학습하면서 올린 질문은 나름 같이 공부하는 혼공족과 고민을 하고 싶어서 올렸는데...족장님이 그렇게 애는 모습을 보면서... 포기하지 말고 찾아보고... 해결을 한 것이... 책을 보며 학습한 것보다 이번 혼공 학습단에 참가하면서 느끼고 배운 것이 컸군요... (당신이 갖고 있는 누군가의 관심이 큰 영향이 갈 수 있습니다.)
      • 단순한 실수를 해결할 수 있었네요... softmax 함수를 정의하면서 혼자 왜 안되지 고민한 것을 discord에 문의하였더니 혼공족님의 도움으로 해결하였어요... 한참 고민했었는데.... ㅎㅎ.. 그러고 보니 해결해준 혼공족님에게 고마움의 표시를 못했네요..아... 칭찬의 방에 올려야 겠군요 ^^
    • 다른 사람이 헷갈리면 나도 헷갈린다.
      • 우연찬게 본 족장님의 게시글 pandas의 axis가 헷갈려요....나도 한때는 공부 했었는데...... 이렇게 보니... 저렇게 하면 되겠구나 했는데.... 곰곰히 보니 나도 헷갈린다... 아마도 사용할 때마다 블러그를 보고 그 때 그때 해결했던것 같군요..... 인터넷 뒤져서.. 나름 규칙을 만들고 정리했다...다음 차 공부할때 np에서 axis가 나왔다.. 역쉬 pandas나 np나 동일한 개념이였다... 
        • 처음 정리할 땐 나와 관련 없는 것인데 정리를 해 두니... 나도 잘 써 먹었다..
        • 족장님이 쪽집게 처럼 모두가 어려워 할 문제를 이슈 제기를 잘 한 것 같다.. 이것도 고맙다.. 
    • 생각을 정리하는 것이 어렵다.
      • 머리속에 이해된 것을 글로 쓴다는 것이 어려움을 다시 느낀다..번역서를 읽으면 왜 이리 이해 안되게 어렵게 투덜 거렸는데... 나 역시 정리를 하면서 어려움을 느낀다...생각 정리를 블로그로 해야 하나? 고민중...
    • 블로그/페북의 기능을 알아가다
      • 그림 복사하기가 가능한 것을 알게 됨!!
        • 블로그에 그림을 삽입할 때 항상 로컬PC에 저장한 다음에 올렸는데.... ... 요 기능 알고 나서는 유래카!!! 외침
        • 서식쓰기 가능이 있다는 것을 알고 적용해서 사용해 봄.. 와우!!
      • 페북 채팅이 별도 프로그램 설치 없이 가능하다는 것을 알게됨 (족장님은 DM이라고 하던데... )

     

    5. 앞으로 계획

     . 6주 학습기간에는 머신러닝은 이런거야를 배웠다면.. 맘에 품은 질문은 왜 이럴까? 어떻게 가능할까? 를 계속 진행할 예정입니다.  

    그래서 또 다른 머신러닝책은 구매 했고  읽을 공부할 예정이고,,, 수학은 아래 책을 볼까 생각중인데... 혹시 추천 책이 있을까요?? (아 이놈의 질문병..) 

     

    핸즈온 머신러닝 들어가기 전에,,, 수학적 기초 온라인으로 듣고 있습니다. 혼공머신이 마중물이 되어서 ML, 딥러닝, LLM을 더 많이 이해 하고 싶네요

     

    0. 감사의 글

    책상속에 묻힐 책을 꺼내어 학습 할  환경을 마련해 주셔서 감사합니다... 책을 통해서 알아가고 , 부족한 것을 느끼고, 또 찾아가려는 나를 흐믓하게 바라볼 수 있는 좋은 기회였습니다.

    직장인이 기술 서적을 혼자 읽기에는 많은 한계가 있는데.. 학습단을 통해 한계를 극복 할  수 있었습니다.

     

    경제적 지원을 해주시 출판사와 리딩 해 주신 족장님께 감사드립니다. 독자로서 이런 사회적 가치를 실천하는  출판사를 응원하게 됩니다.

     

     

    '머신러닝 > 혼공 머신러닝' 카테고리의 다른 글

    [혼공머신] 6주차 딥러닝  (1) 2024.02.06
    [혼공머신] 5주차 비지도 학습  (0) 2024.02.03
    [혼공머신] 4주차 트리 알고리즘  (2) 2024.01.31
    [번외] Encoding의 필요성  (0) 2024.01.31
    Resources  (0) 2024.01.31

     

     

    딥러닝을 이해하기 위해 지금까지 머신러닝을 공부하였구나 생각이 드네요..문제종류(회귀, 이진,다항분류..), 손실함수, 하이퍼파라미터 등.. 

    1. 기본 개념도. 2.TensorFlow 기본 사용법.3 책의 예제로 입력/출력층으로 구성된 모델 살펴보기. 4. 다중 레이어로 구성된 모델 살펴보기로 정리를 해봤어요..

    (아... cheatSheet 중간에 있음)

     

    정리를 하다 보니 앞 부분에서 대충 넘어간 부분들을 다시 살펴볼 필요가 있네요... 그래도... 다시 봐야 하고 중점적으로 봐야 할지 느끼네... 아직 안개속에 있지만 안개가 희미하게 거치는 느낌!!!ㅎ

     

      책을 살때의 매직.... 읽고 안 읽고는 나중 문제다.. 읽고 난 후의 모습을 상상하며 책을 산다....필독!!!

       

      1. 주요 딥러닝 개념도

       

      • 인간의 뇌를 본뜬 Perceptrons..  .
      • 중간층은 입력값과 적절한 웨이트를 조절하여 새로운 의미의 속성을 표현한다고 개념적으로 생각하자.
        • 만약 데이타가 세로, 가로라면 사람은 크기를 유추할 수 있다.
        • 만약 데이타가 집의 크기, 침대 수, 우편번호, 거주자의 연봉이 있다면... 우편번호와 연봉으로 학교의 등급을 표현할 수 있다...
      • 노드의 결과가 다른 노드로 전달할때 얼마의 값 으로 전달해야 할까? 활성화 함수..
        • 이 노드의 결과는 다른 노드에 반영하지 말아야 해...아니야... 0.3만 반영해... 그렇지 않아... 음수로 반영해.....
      • 결과 값을 찾았는데... 찾은 값이 오류가 있다고 판단을 하면,, 찾은 값을 증가 시켜야 할까?? 감소 시켜야 할까?? 
        • 순전파 : 주어진 데이타로 결과를 찾는 방향...순방향
        • 역전파: 결과를 찾았으면, 오류를 수정하기 위해....가중치를 수정한다..... 역방향..
      • Hyperparameters
        • 은닉층의 수, 노드의 수, 활성화 함수, batch_size는 상황에 따라 지정해야 할 하이퍼 파라미터 
          • 다만, 결과층의 활성화 함수는 문제에 따라 정해져 있다!!
        • 옵티마이저 역시 하이퍼파라미터임!!
          • RMS,SGD등

      860~1,000 억개의 신경세포와 100조개의 신호를 주고 받는 시냅스

       

       

      노드 또는 뉴런을 원으로 표기

       

       

       

      예를 들어, 0.2와 0.9 두 개의 입력 값으로 0.5라는 예측값을 도출하는 인공신경망 모델을 학습시키는 과정을 생각해보겠습니다. 아래 그림과 같이 입력층에는 2개의 노드가 할당되며 출력 층에는 1개의 노드가 할당됩니다. 그리고 은닉층은 1개이며, 은닉노드는 3개로 임의로 설정합니다. 여기서 은닉층과 은닉노드의 개수는 다수의 반복실험을 통해 사용자가 적절하게 설정해야 하는 값입니다

       

      활성화 함수

       

       

      문제에 따라 사용되는 활성화 함수와 손실 함수

       

      2. Tensorflow 기초 사용법

      모델 생성이 기존 머신러닝보다 복잡합니다. 레이어를 생성해야 하고, 활성화 함수를 지정해야 하고, loss 함수등을 지정해야 하는군요... 파란색으로 표기된 모델 생성과 학습부분을 세부 공부를 해야 겠군요.

       

      Tensorflow의 cheat sheet를 옆에 끼고 공부하기..

      Keras_Cheat_Sheet_gssmi8.pdf
      5.79MB

      TensorFlow Basic Sample

      (손실함수와 마지막 활성화함수를 보니..이진분류이군요)
      Machine Learning Basic Sample
      import numpy as np
      from tensorflow.keras.models import Sequential
      from tensorflow.keras.layers import Dense

      #데이타 생성
      data = np.random.random((1000,100))
      labels = np.random.randint(2,size=(1000,1))

      #전처리 

      #모델 생성 및 학습
      model = Sequential()
      model.add(Dense(32,
                          activation='relu',
                          input_dim=100))
      model.add(Dense(1, activation='sigmoid'))
      model.compile(optimizer='rmsprop',
                        loss='binary_crossentropy',
                        metrics=['accuracy'])

      model.fit(data,labels,epochs=10,batch_size=32)

      #예측
      predictions = model.predict(data)

      #평가
      from sklearn import neighbors, datasets, preprocessing
      from sklearn.model_selection import train_test_split
      from sklearn.metrics import accuracy_score

      #데이터 생성
      iris = datasets.load_iris()
      X, y = iris.data[:, :2], iris.target
      X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=33)

      #전처리
      scaler = preprocessing.StandardScaler().fit(X_train)
      X_train = scaler.transform(X_train)
      X_test = scaler.transform(X_test)

      #모델 생성 및 학습
      knn = neighbors.KNeighborsClassifier(n_neighbors=5)
      knn.fit(X_train, y_train)

      #예측
      y_pred = knn.predict(X_test)

      # 평가
      accuracy_score(y_test, y_pred)

       

      3. MNIST 패선 다중 클래스 분류

      10종류의 60,000개의 그림을 분류 하는 예제. 하나의 그림은 28*28 크기의 2차원 데이타를 1차원으로 변환하여 사용함. 즉 그림 하나는 784 = 28*28 크기임

       

      입력은 784, 히든 층 없이 결과층을 node=10로 만듭니다.

       

      다중 클라스 분류이므로 sparse+categorical_crossentropy를 사용하고 출력층의 활성화 함수는 softmax를 사용합니다.

      import tensorflow as tf
      from tensorflow import keras
      from sklearn.model_selection import train_test_split
      from tensorflow.keras.utils import *
      
      # 실행마다 동일한 결과를 얻기 위해 케라스에 랜덤 시드를 사용하고 텐서플로 연산을 결정적으로 만듭니다. 
      tf.keras.utils.set_random_seed(42)
      tf.config.experimental.enable_op_determinism()
      
      #데이타 갖고 오기
      (train_input, train_target), (test_input, test_target) = keras.datasets.fashion_mnist.load_data()
      
      #전처리... 
      #1. scaling
      train_scaled = train_input / 255.0
      #2. 데이타를 1차원으로 변경하기
      train_scaled = train_scaled.reshape(-1, 28*28)
      
      #데이타 사이즈 확인
      print(f'데이타 크기 {train_scaled.shape}, 정답 크기{train_target.shape}')
      # 학습/평가데이타 분류
      train_scaled, val_scaled, train_target, val_target = train_test_split(
          train_scaled, train_target, test_size=0.2, random_state=42)
      
      # 모델 생성
      dense = keras.layers.Dense(10, activation='softmax', input_shape=(784,))
      model = keras.Sequential(dense)
      model.compile(loss='sparse_categorical_crossentropy', metrics='accuracy')
      
      # 모델 요약 정보 조회
      model.summary()
      plot_model(model, show_layer_names=False, show_shapes=True)
      
      #모델 학습
      history= model.fit(train_scaled, train_target, epochs=5)
      
      #모델 평가
      model.evaluate(val_scaled, val_target)

       

      다음 함수로 Layer를 그려봅니다.

      plot_model(model, show_layer_names=False, show_shapes=True)

       

      다음 함수로 파라미터를 포함한 model을 확인합니다. 

      Dense Layer는 784개의 입력을 받아서 10개의 노드로 전달하고, 노드 수만큼의 편향이 있어서.. 784 * 10 + 10 = 7850이 되는 것을 알 수 있습니다.

       

      즉 각 레이어의 파라미터는 입력수 * 노드 수 + 노드수임을 알 수 있습니다. 

      데이타 크기 (60000, 784), 정답 크기(60000,)
      Model: "sequential"
      _________________________________________________________________
       Layer (type)                Output Shape              Param #   
      =================================================================
       dense (Dense)               (None, 10)                7850      
                                                                       
      =================================================================
      Total params: 7850 (30.66 KB)
      Trainable params: 7850 (30.66 KB)
      Non-trainable params: 0 (0.00 Byte)

       

      가령, 입력이 100개 이고, 미집층에 있는 뉴런 개수가 10개일때 필요 파라미터는 입력수 * 노드 수 + 노드수이므로 100 * 10 +10 = 1010임을 알 수 있습니다.

       

      정말 맞을까요?? 코드로 확인해보죠.. ^^

       

      먼저 결과 입니다.  손으로 계산한 1010과 코드로 출력한 결과가 100잘 나왔습니다.

      Model: "sequential_1"
      _________________________________________________________________
       Layer (type)                Output Shape              Param #   
      =================================================================
       dense_1 (Dense)             (None, 10)                1010      
                                                                       
      =================================================================
      Total params: 1010 (3.95 KB)
      Trainable params: 1010 (3.95 KB)
      Non-trainable params: 0 (0.00 Byte)
      ___________________________________________________

       

      입력에 대한 갯수가 없어 100개 입력을 했는지 확인해 보겠습니다. 출력을 보니 맞군요..

       

      사용된 코드는 아래와 같습니다.

      # 모델 생성
      dense = keras.layers.Dense(10, activation='softmax', input_shape=(100,))
      model = keras.Sequential(dense)
      model.compile(loss='sparse_categorical_crossentropy', metrics='accuracy')
      
      # 모델 요약 정보 조회
      model.summary()
      
      # 모델 그림 그리기
      plot_model(model, show_layer_names=False, show_shapes=True)

       

       

      4. MNIST 패선 다중 클래스 분류 (다중 레이어)

      • 하이퍼 파라미터인 은닉층 및 옵티마이저 추가하기
      • 데이타가 28* 28 크기의 2차원 데이타를 Flatten Layer를 사용하여 2차원 데이타를 사용하기
        • 3장에서는 np를 사용

       

      import tensorflow as tf
      from tensorflow import keras
      from sklearn.model_selection import train_test_split
      from tensorflow.keras.utils import *
      
      # 실행마다 동일한 결과를 얻기 위해 케라스에 랜덤 시드를 사용하고 텐서플로 연산을 결정적으로 만듭니다. 
      tf.keras.utils.set_random_seed(42)
      tf.config.experimental.enable_op_determinism()
      
      #데이타 갖고 오기
      (train_input, train_target), (test_input, test_target) = keras.datasets.fashion_mnist.load_data()
      
      #전처리... 
      #1. scaling
      train_scaled = train_input / 255.0
      
      
      #데이타 사이즈 확인
      print(f'데이타 크기 {train_scaled.shape}, 정답 크기{train_target.shape}')
      # 학습/평가데이타 분류
      train_scaled, val_scaled, train_target, val_target = train_test_split(
          train_scaled, train_target, test_size=0.2, random_state=42)
      
      # 모델 생성
      model = keras.Sequential()
      
      ##데이타를 1차원으로 변경하기
      ## train_scaled.reshape(-1, 28*28) 대신 Flatten()를 사용한다.
      model.add(keras.layers.Flatten(input_shape=(28, 28)))
      
      model.add(keras.layers.Dense(100, activation='relu'))
      model.add(keras.layers.Dense(10, activation='softmax'))
      ## Optimizer를 사용한다.
      sgd = keras.optimizers.SGD()
      model.compile(optimizer=sgd, loss='sparse_categorical_crossentropy', metrics='accuracy')
      
      # 모델 요약 정보 조회
      model.summary()
      plot_model(model, show_layer_names=False, show_shapes=True)
      
      #모델 학습
      history= model.fit(train_scaled, train_target, epochs=5)
      
      #모델 평가
      model.evaluate(val_scaled, val_target)

       

       

      참고자료

       

      https://www.hani.co.kr/arti/science/science_general/755976.html

       

      1000억개 뉴런, 100조개 시냅스…이들은 기억에서 무슨 일할까

      기억에 관한 연구 결과가 종종 뉴스로 보도됩니다. 기억을 다룬 과학 뉴스를 좀더 흥미롭게 보려면 신경과학의 몇 가지 용어에 익숙해지는 게 좋습니다. 기억은 뇌 신경세포와 시냅스에 저장된

      www.hani.co.kr

       

      https://www.lgcns.com/blog/cns-tech/ai-data/14558/

       

      인공신경망이란 무엇인가? - LG CNS

      2016년 3월, 세계적으로 큰 이슈를 몰고 온 게임이 성사되었습니다. 그것은 바로 세계 최고 바둑기사인 대한민국의 이세돌과 구글 딥마인드의 인공지능 바둑 프로그램 알파고(alphago)와의 대결인

      www.lgcns.com

       

      https://jalynne-kim.medium.com/%EB%94%A5%EB%9F%AC%EB%8B%9D-%ED%95%B5%EC%8B%AC-%EA%B0%9C%EB%85%90-%ED%95%B5%EC%8B%AC-%EC%9A%A9%EC%96%B4-%EC%89%BD%EA%B2%8C-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90-%EA%B0%80%EB%8A%A5%ED%95%9C-7196a39df5a0

       

      [딥러닝] 핵심 개념&핵심 용어 쉽게 알아보자! (가능한)

      안녕하세요, 오늘 주제는 [딥러닝]입니다.

      jalynne-kim.medium.com

       

      https://velog.io/@denev6/neural-network

       

      velog

       

      velog.io

       

      https://github.com/hunkim/DeepLearningZeroToAll?tab=readme-ov-file

       

      GitHub - hunkim/DeepLearningZeroToAll: TensorFlow Basic Tutorial Labs

      TensorFlow Basic Tutorial Labs. Contribute to hunkim/DeepLearningZeroToAll development by creating an account on GitHub.

      github.com

       

      https://blog.skby.net/%EC%9D%B8%EA%B3%B5%EC%8B%A0%EA%B2%BD%EB%A7%9D-artificial-neural-network/

       

      인공신경망 (Artificial Neural Network) < 도리의 디지털라이프

      I. 분류와 예측 모형, 인공신경망, ANN 가. 인공신경망의 개념 인간의 뉴런을 모방하여 가중치 조정을 통한 분류와 예측을 위해 다수 노드를 연결한 계층적 조직 나. 인공신경망의 특징 특징 구성

      blog.skby.net

       

      https://velog.io/@yookyungkho/%EB%94%A5%EB%9F%AC%EB%8B%9D-%EC%98%B5%ED%8B%B0%EB%A7%88%EC%9D%B4%EC%A0%80-%EC%A0%95%EB%B3%B5%EA%B8%B0%EB%B6%80%EC%A0%9C-CS231n-Lecture7-Review

       

      velog

       

      velog.io

       

      https://www.holehouse.org/mlclass/

       

      Machine Learning - complete course notes

      Stanford Machine Learning The following notes represent a complete, stand alone interpretation of Stanford's machine learning course presented by Professor Andrew Ng and originally posted on the ml-class.org website during the fall 2011 semester. The topic

      www.holehouse.org

       

      https://www.gttkorea.com/news/articleView.html?idxno=4086

      + Recent posts