반응형

인공지능(AI)은 비즈니스와 의료와 같은 산업에만 영향을 미치는 것이 아니다. 그것은 또한 인공지능이 만든 예술의 새로운 시대를 열면서 창조 산업에서 점점 더 많은 역할을 하고 있다. 인공지능 기술과 도구는 종종 누구나 광범위하게 접근할 수 있으며, 이는 완전히 새로운 세대의 예술가를 만드는 데 도움이 되고 있다. 

우리는 종종 인공지능이 예술, 영화 및 기타 창의적인 산업을 포함한 모든 인간의 작업을 자동화하거나 인수할 것이라는 말을 듣는다. 하지만 이것은 사실과 거리가 멀다. 인공지능은 예술가들이 새로운 창조적 영역을 탐구하는 데 사용할 수 있는 보완적인 도구이다. 

이러한 창의적인 인공지능 도구는 누구나 예술을 창조하기 위해 사용할 수 있으며, 종종 NFT로 전환될 수 있다. 

10대 인공지능 아트 생성기를 살펴봅시다:

1. Images.ai


이것은 unite.ai 팀에 의해 출시될 많은 인공지능 도구 중 첫 번째이기 때문에 우리는 약간 편견을 가질 수 있다. 그것은 최신 오픈 소스 안정적 확산 기술을 사용하여 AI 예술 생성을 제공한다.

안정적인 확산 솔루션을 제공하는 경쟁 웹 사이트와 달리 웹 사이트는 무료입니다. 우리는 팀이 확장되고 자원을 계속 추가하면서 알고리즘을 반복적이고 지속적으로 개선하고 이 소프트웨어 위에 계층화된 기계 학습 알고리즘을 최적화할 것이다.

프로세스는 간단합니다. 웹 사이트를 방문하여 3가지 이미지 크기 중에서 선택하고 검색어를 입력하면 마법처럼 웹 사이트가 이미지를 자동으로 생성합니다.

몇 가지 핵심 기능:

간편하고 사용이 간편함 – 시작하는 데 10초 미만 소요
이미지에서 밈 만들기
개인화된 갤러리 만들기(곧 출시!)
다양한 크기 옵션 중에서 선택
파워 유저를 위한 고급 설정
이미지를 보려면 여기를 클릭하십시오.ai

https://images.ai/



2. NightCafe


나이트 카페는 인공지능 아트 제너레이터의 세계에서 큰 이름 중 하나입니다. 다른 발전기에 비해 알고리즘과 옵션이 많은 것으로 알려져 있지만 초보 사용자들도 쉽게 이해할 수 있다. 나이트 카페는 신용 시스템을 기반으로 하지만, 관대한 무료 계층과 커뮤니티에 참여하여 신용을 "얻을" 수 있는 많은 옵션이 있습니다. 당신은 또한 크레딧을 구매할 수 있고 5% 할인된 코드 UNITAI를 사용할 수 있다.

NightCafe의 주요 기능은 다음과 같습니다:

당신은 당신의 창조물을 소유합니다
다른 생성기보다 더 많은 알고리즘
고급 사용자를 위한 다양한 제어 기능
커뮤니티에 참여하여 학점 획득
많은 사회적 특징과 활기차고 도움이 되는 커뮤니티
창작물을 컬렉션으로 구성
모든 이미지 대량 다운로드
비디오 만들기
당신의 예술 작품의 프린트를 구입하세요
여기에 나열된 모든 AI 아트 생성기에서 기본 알고리즘이 항상 변경되지만, 나이트 카페의 다른 기능 목록은 그것을 차별화하는 것이다.

NightCafe에서 모든 크레딧 팩 및 PRO 구독을 5% 할인하는 코드 UNITAI를 사용하십시오.

Night Cafe Review를 읽거나 Night Cafe를 방문하십시오.

https://creator.nightcafe.studio/?code=UNITEAI



3. Shutterstock


셔터스탁은 뉴욕 증권거래소(NYSE)에서 거래하는 설립된 회사이다.  그들은 재고 사진, 재고 영상, 재고 음악, 편집 도구를 제공하며 2023년 현재 자신의 이미지와 예술을 생성하기 위한 최고의 도구를 제공한다. 이는 OpenAI의 DAL-E2 이미지 생성 AI 시스템을 통합해 이뤄졌다.

DALL-E는 게임 체인저였고, 버전 2는 훨씬 더 좋다. DALL-E2는 개념, 속성, 스타일을 결합할 수 있는 고해상도로 보다 사실적인 이미지를 생성하도록 설계된 후속 제품이다.

나아가 셔터스톡 솔루션을 차별화하는 것은 이러한 최첨단 AI 생성 시스템과 셔터스톡 플랫폼의 사용 편의성을 결합한 것이다. 그들은 UX(사용자 인터페이스)를 숙달했고 그것을 빠르고 간단하게 시작할 수 있게 해준다.

3가지 간단한 단계가 있습니다:

아무거나 상상해봐! 그런 다음 검색란에 입력합니다. 생성을 클릭합니다.
Shutterstock은 선택할 수 있는 몇 가지 버전을 생성합니다.
원하는 경우 만들기에서 이미지를 편집합니다. 아니면 그냥 라이센스를 받고 다운로드하세요.
Shutterstock의 무료 트라이얼 오퍼를 통해 AI가 생성한 이미지를 최대 10개까지 무료로 라이센스할 수 있습니다.

http://shutterstock.com/ko/generate?irclickid=UnOwjP37bxyNToV31R2eaQ-SUkARaWxd5WvBUc0&irgwc=1&pl=2459529-1584244&utm_medium=Affiliate&utm_campaign=Securities.io&utm_source=2459529&utm_term=&utm_content=1584244



4. DALL-E 2


우리의 10대 AI 아트 생성기 목록의 맨 위에는 OpenAI가 개발한 AI 이미지 생성기인 DAL-E 2가 있다. 단 몇 분 만에 인공지능으로 매우 사실적인 이미지를 만들 수 있다. 

DALL-E 2는 놀라운 잠재력을 보여주고 있다. OpenAI에 따르면, 이 도구는 일러스트레이션을 만들고, 제품을 디자인하고, 사업을 위한 새로운 아이디어를 창출하는 데 사용될 수 있다. 

DALL-E2의 사용하기 쉬운 인터페이스는 누구나 AI로 고품질의 이미지를 만들 수 있게 한다. 이것은 전문 아티스트들만이 DALL-E2에서 가치를 찾을 뿐만 아니라 아마추어 아티스트들도 그 도구를 사용할 수 있다는 것을 의미한다. 

DALL-E2가 제공하는 최고의 도구 중 하나는 그림에 그림자, 하이라이트 등의 세부 사항을 추가할 수 있는 페인트 브러시입니다. 페인트 브러시와 같은 도구를 사용하면 여러 개의 레이어가 있는 복잡한 이미지를 만들 수 있으며, 각 레이어는 고유한 속성으로 사용자 정의됩니다. 

다음은 DALL-E 2의 주요 기능 중 일부입니다: 

몇 분 안에 매우 사실적인 이미지 제공
그림 만들기
디자인 제품
사용하기 쉬운 인터페이스
여러 계층 사용자 지정

https://openai.com/product/dall-e-2

 

5. Deep Dream Generator


또 다른 최고의 인공지능 아트 생성기 중 하나는 아이프넷의 딥 드림 생성기이다. 시장에서 가장 인기 있는 AI 아트 제너레이터 중 하나인 딥 드림은 AI로 사실적인 이미지를 만들 수 있는 온라인 도구입니다. 

딥 드림은 수백만 개의 이미지로 훈련된 신경망에 의존한다. 도구가 원본을 기반으로 새 이미지를 생성하기 전에 이미지를 업로드하기만 하면 되므로 사용이 간편합니다. 

딥 드림의 주요 응용 프로그램 중 하나는 다른 그림 스타일을 사용하여 다른 장소 또는 기간에서 온 것으로 보이는 이미지를 생성하기 때문에 그것을 사용하여 예술 작품을 만드는 것입니다. 

이 도구를 사용하면 동물 또는 풍경과 같은 범주를 선택한 후 이를 기반으로 사실적인 이미지를 만들 수 있습니다. 여기에 더해 딥드림은 세 가지 스타일을 선택할 수 있다: 딥 스타일, 얇은 스타일 또는 딥 드림. 스타일을 선택한 후 이미지를 미리 볼 수 있습니다.

그들은 또한 그들이 텍스트 2 드림이라고 이름 붙인 그들만의 텍스트를 이미지 소프트웨어에 공개했다.

Deep Dream의 주요 기능은 다음과 같습니다: 

인공지능으로 사실적인 이미지를 만듭니다
수백만 개의 이미지에 대해 훈련된 신경망
다양한 그림 스타일
이미지 범주
세 가지 스타일이 있습니다
텍스트에서 이미지로

https://deepdreamgenerator.com/


6. Artbreeder


인공지능 아트 생성자들 사이에서 가장 잘 알려진 이름 중 하나는 이미지 품질 향상자인 아트브리더이다. 이 도구를 사용하면 머신 러닝을 통해 이미지의 다양한 변형을 생성할 수 있습니다. 

당신은 하나의 플랫폼에서 풍경화, 애니메이션 피규어, 초상화, 그리고 다양한 다른 예술 작품들을 만들 수 있다. 다른 도구들 중 일부는 피부색, 머리카락, 그리고 눈과 같은 얼굴 특징을 바꾸는 능력을 포함한다. 여러분은 또한 사진을 애니메이션 인물로 바꿀 수 있습니다. 

아트브리더의 또 다른 주요 기능은 수천 개의 일러스트레이션을 제공하고 폴더에서 관리할 수 있다는 것이다. 그런 다음 결과를 JPG 또는 PNG 형식으로 다운로드할 수 있습니다. 

아트 브리더의 주요 기능은 다음과 같습니다:

화질 향상제
이미지의 다양한 변형 생성
풍경, 애니메이션 인물, 초상화
폴더의 그림 관리
JPG 및 PNG 형식
아트 브리더 소개

https://www.artbreeder.com/

 

 

7. Stablecog


이 오픈 소스 AI 이미지 생성기는 첫 달에 3000명 이상이 사용했으며, 처음부터 사실적인 이미지를 생성한다. 다른 인공지능 예술 발전기들처럼, 그것은 누구나 쉽게 사용할 수 있다. 사실적인 이미지 중 하나를 만드는 데는 몇 단계만 거치면 된다. 

스테이블코그는 SvelteKit로 만들어졌으며, 메타데이터 기록과 기본 코그 클러스터 관리를 위해 Supbase를 사용한다.

다음은 Big Sleep의 몇 가지 주요 기능입니다:

처음부터 사실적인 이미지
사용하기 편리함
공짜
GAN 활용 

 

https://stablecog.com/


8. DeepAI

2016년 설립, 딥AI는 오픈소스 소프트웨어를 통한 AI 민주화를 목표로 만들어졌다. 그것은 사실적인 이미지를 만드는 데 사용할 수 있는 다양한 도구를 제공한다. 

DeepAI는 당신이 원하는 만큼 많은 이미지를 만들 수 있게 해주며, 각각의 이미지는 독특하다. 사용자 지정이 가능하여 세부 정보, 색상, 질감 등을 변경할 수 있습니다. 그림을 입력하는 경우 Deep(깊이AI는 해상도 독립적인 벡터 이미지를 즉시 생성할 수 있다. 

Deep에서 제공하는 다른 도구 중 일부AI에 스타일 포함사실적인 이미지를 만들 수 있는 GAN과 BigGAN. 카툰GAN 도구를 사용하면 이미지를 만화로 만들 수 있습니다. 

다음은 Deep의 몇 가지 주요 기능입니다AI:

오픈 소스 소프트웨어
사실적인 이미지를 만들기 위한 다양한 도구
각 이미지에 대한 다양한 세부 정보 변경
Cartoon으로 만화 만들기GAN

 

 

https://deepai.org/machine-learning-model/text2img

9. StarryAI


스타리 AI는 예술을 NFT로 바꿀 수 있는 인공지능 예술 생성기다. 사용자의 입력이 필요하지 않습니다. 그것은 기계 학습 알고리즘으로 이미지를 처리할 수 있다. 

스타리의 가장 좋은 부분 중 하나AI는 개인적으로 또는 상업적으로 사용할 수 있도록 생성된 이미지에 대한 모든 소유권을 제공합니다. 그것은 주요 판매 포인트인 무료 NFT 발전기 역할을 한다. 기술은 지속적으로 향상되고 있지만, 앱으로 만들어진 놀라운 예술의 예는 이미 있었다. 

여기 스타리의 주요 특징 중 몇 가지가 있다AI:

자동 이미지 생성기
사용자 입력 없음
텍스트-이미지
사용 가능한 NFT 생성기 역할을 합니다
인공지능을 이용한 예술 창작 방법 - starryai

https://starryai.com/

 

 

10. CF Spark


주문형 인쇄 자산, 글꼴 및 그래픽을 위한 디지털 시장인 Creative Fabrica가 제공하는 AI 이미지 생성기인 CF Spark는 수백만 개의 프롬프트를 생성했습니다. 이 플랫폼의 한 가지 독특한 특징은 사용자가 생성 AI 파일을 다른 회원에게 판매함으로써 수익을 창출할 수 있으며, 이는 창작자에게 이러한 기회를 제공하는 최초의 사례가 된다는 점이다.

CF 스파크를 사용하기 위해 작성자는 페이지에 게시하도록 선택할 수 있는 4개의 이미지를 생성하는 프롬프트를 입력합니다. 플랫폼의 다른 사용자들은 AI 이미지를 다시 프롬프트하여 다른 결과를 받고, 티셔츠 디자인과 같은 AI가 생성한 예술로 자신의 창작물 이미지를 업로드할 수 있다.

일반적으로, 현대의 인공지능 예술 생성기는 사용자의 프롬프트를 기반으로 이미지를 생성하는 데 몇 분이 걸린다. 훌륭한 예술은 시간이 걸리지만, CF 스파크 구독은 속도를 높이는 데 도움이 될 수 있다

https://www.creativefabrica.com/spark/ai-image-generator/

출처: https://www.unite.ai/10-best-ai-art-generators/

반응형
반응형

출처: https://rfriend.tistory.com/289

 

지난번 포스팅에서는 다차원 행렬 ndarray에 축을 추가하는 방법으로 arr(:, np.newaxis, :), np.tile() 을 소개했었습니다.

 

이번 포스팅에서는 행렬의 행과 열을 바꾸기, 행렬의 축을 바꾸는 방법을 알아보겠습니다.  선형대수에서 보면 '전치행렬(transpose matrix)'이라는 특수한 형태의 행렬이 있는데요, 이번 포스팅이 바로 그겁니다. 행렬의 내적(inner product) 구할 때 aT*a 처럼 전치행렬과 원래 행렬을 곱할 때 전치행렬(aT)를 씁니다.

 

 

Python의 NumPy 로 부터 행렬 전치를 위해

 

 - a.T attribute

 - np.transpose(a) method

 - np.swapaxes(a, 0, 1) method

 

의 3가지 방법을 사용할 수 있습니다.

 

 

 

a.T attrbute, np.transpose() method, np.swapaxes() method 각각에 대해 2차원 행렬을 전치하는 단한 예를 들어보겠습니다.

 

 

  (1-1) Transposing 2 D array : a.T attribute

 



In [1]: import numpy as np


In [2]: a = np.arange(15).reshape(3, 5)


In [3]: a
Out[3]:
array([[ 0,  1,  2,  3,  4],
        [ 5,  6,  7,  8,  9],
        [10, 11, 12, 13, 14]])





# (1-1) transposing 2D array : T attribute

In [4]: a.T
Out[4]:
array([[ 0,  5, 10],
        [ 1,  6, 11],
        [ 2,  7, 12],
        [ 3,  8, 13],
        [ 4,  9, 14]])



 

 

 

 

  (1-2) Transposing 2D array : np.transpose() method

 



In [5]: a
Out[5]:
array([[ 0,  1,  2,  3,  4],
        [ 5,  6,  7,  8,  9],
        [10, 11, 12, 13, 14]])





# (1-2) transpose method : numpy.transpose(a, axes=None)

In [6]: np.transpose(a)
Out[6]:
array([[ 0,  5, 10],
        [ 1,  6, 11],
        [ 2,  7, 12],
        [ 3,  8, 13],
        [ 4,  9, 14]])



 

 

 

 

  (1-3) Transposing 2D array : np.swapaxes() method

 



In [7]: a
Out[7]:
array([[ 0,  1,  2,  3,  4],
        [ 5,  6,  7,  8,  9],
        [10, 11, 12, 13, 14]])





# (1-3) swapaxes method : numpy.swapaxes(a, axis1, axis2)

In [8]: np.swapaxes(a, 0, 1)
Out[8]:
array([[ 0,  5, 10],
        [ 1,  6, 11],
        [ 2,  7, 12],
        [ 3,  8, 13],
        [ 4,  9, 14]])



 

 

 

 

이쯤에서 NumPy의 np.dot() 으로 행렬 내적 (inner product, aT*a) 계산해볼까요?

 



In [9]: np.dot(a.T, a)
Out[9]:
array([[125, 140, 155, 170, 185],
        [140, 158, 176, 194, 212],
        [155, 176, 197, 218, 239],
        [170, 194, 218, 242, 266],
        [185, 212, 239, 266, 293]])





In [10]: np.dot(np.transpose(a), a)
Out[10]:
array([[125, 140, 155, 170, 185],
        [140, 158, 176, 194, 212],
        [155, 176, 197, 218, 239],
        [170, 194, 218, 242, 266],
        [185, 212, 239, 266, 293]])



In [11]: np.dot(np.swapaxes(a, 0, 1), a)
Out[11]:
array([[125, 140, 155, 170, 185],
        [140, 158, 176, 194, 212],
        [155, 176, 197, 218, 239],
        [170, 194, 218, 242, 266],
        [185, 212, 239, 266, 293]])


 

 

 

2차원 행렬로 전치에 대한 맛을 봤으니, 이제 3차원 행렬의 축을 바꿔보는 것으로 난이도를 높여보겠습니다.  np.transpose() 와 np.swapaxes() method는 전치시키려고 하는 축을 입력해줘야 하는데요, 조금 조심해서 사용해야 합니다.

 

  (2-1) Transposing 3D array : a.T attribute

 



In [12]: b = np.arange(24).reshape(2, 3, 4)


In [13]: b
Out[13]:
array([[[ 0,  1,  2,  3],
         [ 4,  5,  6,  7],
         [ 8,  9, 10, 11]],

        [[12, 13, 14, 15],
         [16, 17, 18, 19],
         [20, 21, 22, 23]]])





In [14]: b.T
Out[14]:
array([[[ 0, 12],
         [ 4, 16],
         [ 8, 20]],

        [[ 1, 13],
         [ 5, 17],
         [ 9, 21]],

        [[ 2, 14],
         [ 6, 18],
         [10, 22]],

        [[ 3, 15],
         [ 7, 19],
         [11, 23]]])





In [15]: b.T.shape
Out[15]: (4, 3, 2)
 

 

 

 

  (2-2) Transposing 3D array : np.transpose() method

 

np.transpose() method는 축을 바꾸고 싶은 위치, 순서를 분석가가 마음대로 지정할 수 있다는 측면에서 T attribute 보다 자유도가 높습니다. (처음엔 좀 헷갈리고 이해가 잘 안가는 면도 있지만요)

 



# shape (2, 3, 4)
In [16]: b
Out[16]:
array([[[ 0,  1,  2,  3],
         [ 4,  5,  6,  7],
         [ 8,  9, 10, 11]],

        [[12, 13, 14, 15],
         [16, 17, 18, 19],
         [20, 21, 22, 23]]])





# shape(2, 3, 4) => shape (4, 3, 2)


In [17]: np.transpose(b)
Out[17]:
array([[[ 0, 12],
         [ 4, 16],
         [ 8, 20]],

        [[ 1, 13],
         [ 5, 17],
         [ 9, 21]],

        [[ 2, 14],
         [ 6, 18],
         [10, 22]],

        [[ 3, 15],
         [ 7, 19],
         [11, 23]]])







# shape(2, 3, 4) => shape (4, 3, 2)


In [18]: np.transpose(b, (2, 1, 0))
Out[18]:
array([[[ 0, 12],
         [ 4, 16],
         [ 8, 20]],

        [[ 1, 13],
         [ 5, 17],
         [ 9, 21]],

        [[ 2, 14],
         [ 6, 18],
         [10, 22]],

        [[ 3, 15],
         [ 7, 19],
         [11, 23]]])





In [19]: b.shape
Out[19]: (2, 3, 4)


In [20]: np.transpose(b).shape
Out[20]: (4, 3, 2)
 

 

 

 

  (2-3) Transposing 3D array : np.swapaxes() method

 



In [21]: b
Out[21]:
array([[[ 0,  1,  2,  3],
         [ 4,  5,  6,  7],
         [ 8,  9, 10, 11]],

        [[12, 13, 14, 15],
         [16, 17, 18, 19],
         [20, 21, 22, 23]]])





In [22]: b.shape
Out[22]: (2, 3, 4)



# shape(2, 3, 4) => shape(4, 3, 2)



In [23]: np.swapaxes(b, 0, 2)
Out[23]:
array([[[ 0, 12],
         [ 4, 16],
         [ 8, 20]],

        [[ 1, 13],
         [ 5, 17],
         [ 9, 21]],

        [[ 2, 14],
         [ 6, 18],
         [10, 22]],

        [[ 3, 15],
         [ 7, 19],
         [11, 23]]])

 
In [24]: np.swapaxes(b, 0, 2).shape
Out[24]: (4, 3, 2)
 

 

 

 

np.transpose() 와 np.swapaxes() method를 사용해서 전치시키려는 축의 순서를 위의 예시와는 조금 다르게 바꿔서 해보겠습니다. 축(axes)의 순서를 바꿔서 입력해주면 됩니다. (말로 설명하기 좀 어려운데요, 아래 예와 위의 예를 유심히 살펴보시기 바랍니다)

 



In [25]: b
Out[25]:
array([[[ 0,  1,  2,  3],
         [ 4,  5,  6,  7],
         [ 8,  9, 10, 11]],

        [[12, 13, 14, 15],
         [16, 17, 18, 19],
         [20, 21, 22, 23]]])





In [26]: b.shape
Out[26]: (2, 3, 4)




# shape(2, 3, 4) => shape(3, 2, 4)

In [27]: np.transpose(b, (1, 0, 2)).shape
Out[27]: (3, 2, 4)


In [28]: np.transpose(b, (1, 0, 2))
Out[28]:
ararray([[[ 0,  1,  2,  3],
           [12, 13, 14, 15]],

          [[ 4,  5,  6,  7],
           [16, 17, 18, 19]],

          [[ 8,  9, 10, 11],
           [20, 21, 22, 23]]])



 

 

 

 

위의 [28]번 np.transpose(b, (1, 0, 2)) 와 똑같은 결과를 얻을 수 있는 방법으로 np.swapaxes(b, 1, 0)을 사용하면 됩니다.

 



In [29]: b
Out[29]:
array([[[ 0,  1,  2,  3],
         [ 4,  5,  6,  7],
         [ 8,  9, 10, 11]],

        [[12, 13, 14, 15],
         [16, 17, 18, 19],
         [20, 21, 22, 23]]])



In [30]: b.shape
Out[30]: (2, 3, 4)


In [31]: np.swapaxes(b, 1, 0).shape
Out[31]: (3, 2, 4)


In [32]: np.swapaxes(b, 1, 0)
Out[32]:
ararray([[[ 0,  1,  2,  3],
           [12, 13, 14, 15]],

          [[ 4,  5,  6,  7],
           [16, 17, 18, 19]],

          [[ 8,  9, 10, 11],
           [20, 21, 22, 23]]])

 

 

 

많은 도움 되었기를 바랍니다.



출처: https://rfriend.tistory.com/289 [R, Python 분석과 프로그래밍의 친구 (by R Friend)]

반응형
반응형

출처: https://medium.com/@kmkgabia/ml-sigmoid-%EB%8C%80%EC%8B%A0-relu-%EC%83%81%ED%99%A9%EC%97%90-%EB%A7%9E%EB%8A%94-%ED%99%9C%EC%84%B1%ED%99%94-%ED%95%A8%EC%88%98-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-c65f620ad6fd

training 데이터 셋으로 학습시킨 모델을 이용해 test 데이터 셋으로 테스트를 한다는 건 교과서로 공부한 후 실전 문제로 시험을 보는 것과 같다. 여러 번에 걸쳐 training 시킨 후 학습 결과를 확인하기 위해 test하는 작업을 반복해야 한다.

보통 트레이닝 셋과 테스트 셋은 완전히 구분되어 있다. training data set은 다시 2가지로 구성되기도 하는데, 실제 train을 위한 약 70%의 training data set과 validation 체크를 위한 약 30%의 validation data set이다. 시험으로 치면 validation은 모의고사라고 할 수 있다.

Online Learning
dataset이 굉장히 많은 경우 한번에 넣어서 학습 시키기 어려울 때가 있다. 이럴 때는 online Learning 이라는 형태의 학습 방법을 이용한다.

training set이 예를 들어 100만개가 있다고 가정해보자. 이를 10만개씩 나눠서 학습시킬 수 있는데 이 때 모델은 이전에 학습시킨 10만개의 데이터가 남긴 학습 결과가 다음에 학습시킬 10만개의 데이터에 반영될 수 있도록 해야 한다. 이런 학습 방법을 online learning 이라고 한다.

 

반응형
반응형

출처:https://medium.com/@kmkgabia/ml-sigmoid-%EB%8C%80%EC%8B%A0-relu-%EC%83%81%ED%99%A9%EC%97%90-%EB%A7%9E%EB%8A%94-%ED%99%9C%EC%84%B1%ED%99%94-%ED%95%A8%EC%88%98-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-c65f620ad6fd

 

Sigmoid 함수는 binary classification 에 적절함 함수다. 일정 값을 기준으로 0인지 1인지구분함으로써 분류하는 방식이다. 딥러닝에서는 특정 임계치를 넘을 때만 활성화되기 때문에 activation function 중의 하나로 구분되는 함수다.

보통 처음은 input layer, 마지막은 output layer 라고 하는데, 이 가운데 보이지 않는 부분은 hidden layer로 칭한다. 실제로 9개의 hidden layer 가 있다고 했을 때 Tensorflow에 돌려 보면 정확도가 0.5밖에 안되는.. 1개 hidden layer일때 보다도 못한 결과가 나오게 된다. 왜 이런 문제가 발생할까?

  • backpropagation(1986): 2단 3단 정도의 레이어는 학습이 잘 되나, 9단, 10단으로 넘어가면서 부터는 학습이 제대로 이루어 지지 않는 이유는, 역전파 방식에 있다고 볼 수 있다. 레이어가 많을 경우 각각의 단계의 값을 미분해서 최초 레이어까지 결과 값을 전달해가게 되는데, 만약 내부의 hidden layer들이 모두 sigmoid 함수로 이루어져 있다면 각 단계에서 계산한 값은 모두 0과 1 사이의 값일 수밖에 없다.
  • Vanishing Gradient: 따라서 여러 레이어를 갖고 있을 때, 최초 입력 값은 각각의 레이어에서 나온 값들을 곱해준 만큼의 결과에 영향을 주는 것이므로 최종 미분값은 결국 0에 가까운 값이 될 수 밖에 없다. 이를 경사도(기울기)가 사라지는 현상으로 본다. 최초 입력 값이 최종 결과 값에 별로 영향을 끼치지 않는다는 결론으로 수렴하게 되는 것이다.

sigmoid 함수는 0<n<1 사이의 값만 다루므로 국 chain rule을 이용해 계속 값을 곱해나간다고 했을 때 결과 값이 0에 수렴할 수 밖에 없다는 한계를 가지고 있으므로, 나중에는 1보다 작아지지 않게 하기 위한 대안으로 ReLU라는 함수를 적용하게 된다.

ReLU

이후 내부 hidden layer를 활성화 시키는 함수로 sigmoid를 사용하지 않고 ReLU라는 활성화 함수를 사용하게 되는데, 이 함수는 쉽게 말해 0보다 작은 값이 나온 경우 0을 반환하고, 0보다 큰 값이 나온 경우 그 값을 그대로 반환하는 함수다. 0보다 큰 값일 경우 1을 반환하는 sigmoid와 다르다. 따라서 내부 hidden layer에는 ReLU를 적용하고, 마지막 output layer에서만 sigmoid 함수를 적용하면 이전에 비해 정확도가 훨씬 올라가게 된다.

sigmoid 와 relu 외에도 여러가지 활성화 함수가 있다.

반응형

+ Recent posts