아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

이진 신경망

시간 제한2초메모리 제한256 MB

요약
n개 입력 불리언 함수의 진리표가 주어질 때(n은 최대 10), 층 수 25 이하, 뉴런 10^4개 이하, 연결 3*10^4개 이하인 시그모이드 신경망을 설계해 마지막 뉴런의 값이 f를 근사하도록 만든다.
난이도

어려움10점 중 9점

유형
구현, 그리디, 수학, 비트 연산
정답자
아직 제출이 없습니다

문제

인공 신경망(흔히 신경망이라고 부른다)은 생물학적 신경망에서 착안한 수학적 모델이다. 신경망은 서로 연결된 인공 뉴런의 집단으로 이루어져 있으며, 연결주의적 계산 방식으로 정보를 처리한다.

뉴런이 층이라는 집단으로 묶여 있으면 그 신경망을 층 구조 신경망이라고 한다. 같은 층에 속한 두 뉴런 사이에는 연결이 없다.

신경망에 있는 뉴런의 수를 qq라 하고 뉴런에 11부터 qq까지 차례로 양의 정수를 붙이자. 뉴런 ii와 뉴런 jj 사이의 연결은 연결 가중치 wi,jw_{i, j}로 나타낼 수 있다.

신경망은 방향성 비순환 그래프로 나타낼 수 있다. 뉴런은 정점에, 뉴런 사이의 연결은 간선에 대응되며, 각 연결의 연결 가중치는 대응하는 간선의 가중치가 된다.

위 그림의 신경망은 네 개의 층으로 이루어져 있다. 첫 번째 층에는 뉴런 11, 22, 33이, 두 번째 층에는 뉴런 44, 55가, 세 번째 층에는 뉴런 66, 77, 88이, 네 번째 층에는 뉴런 99 하나만 있다.

각 뉴런 ii는 값 viv_{i}를 가지며, 이 값은 다음 식으로 계산된다.

vi=11+e−∑jvj⋅wj,iv_{i} = \frac{1}{1 + e^{- \sum_{j}^{ } v_{j} \cdot w_{j, i}}}

층 구조 신경망이 다음 성질을 만족하면 이진 신경망이라고 한다.

  • 첫 번째 층의 각 뉴런 ii의 값 viv_{i}는 00 또는 11이다.
  • 뉴런 aa가 층 ii에 속하고 뉴런 bb가 층 jj에 속하며 i>ji > j이면, 뉴런 aa에서 뉴런 bb로 가는 연결은 없다. 뉴런 bb에서 뉴런 aa로 가는 연결은 가능하다.
  • 마지막 층에는 뉴런이 하나만 있고 그 값은 00 또는 11이다.
  • 각 층에는 뉴런이 하나 이상 있다.

이 문제에서는 nn개의 인자 x1x_{1}, x2x_{2}, …\ldots, xnx_{n}을 갖는 이진 함수 f(x1f(x_{1}, x2x_{2}, …\ldots xn)x_{n})를 구현하는 이진 신경망을 만들어야 한다.

이 이진 신경망의 첫 번째 층에는 11부터 nn까지 차례로 양의 정수가 붙은 뉴런이 정확히 nn개 있어야 한다. 뉴런 ii의 값은 자동으로 xix_{i}로 정해진다. 나머지 뉴런에는 n+1n + 1부터 qq까지 차례로 양의 정수를 붙인다. 여기서 qq는 신경망에 있는 뉴런의 수이다. 모든 값 viv_{i}(n+1≤i≤qn + 1 \leq i \leq q)는 위에서 주어진 식으로 계산된다.

이 이진 신경망의 마지막 층에는 뉴런이 하나만 있어야 한다. 이 뉴런의 값은 f(x1f(x_{1}, x2x_{2}, …\ldots, xn)x_{n})와 10−710^{-7} 이하만큼 차이가 나야 한다.

이진 신경망의 층 수는 2525를 넘지 않아야 한다. 뉴런의 수 qq는 10410^{4}를 넘지 않아야 한다. 연결의 총 개수 ee는 3⋅1043 \cdot 10^{4}를 넘지 않아야 한다.

입력

첫째 줄에 정수 nn이 주어진다(2≤n≤102 \leq n \leq 10). 둘째 줄에 2n2^{n}개의 문자가 주어진다. 각 문자는 '0' 또는 '1'이다. 첫 번째 문자는 f(0,…,0,0)f(0, \ldots, 0, 0)의 값을, 두 번째 문자는 f(0,…,0,1)f(0, \ldots, 0, 1)의 값을 나타내는 식으로, 마지막 문자는 f(1,…,1,1)f(1, \ldots, 1, 1)의 값을 나타낸다.

출력

첫째 줄에 이진 신경망의 층 수 ll과 뉴런의 수 qq를 출력한다(2≤l≤252 \leq l \leq 25, 1≤q≤1041 \leq q \leq 10^{4}).

둘째 줄에 qq개의 정수 pip_{i}를 출력한다. pip_{i}는 뉴런 ii가 속한 층의 번호이다(1≤pi≤l1 \leq p_{i} \leq l).

셋째 줄에 이진 신경망의 연결 개수 ee를 출력한다(n≤e≤3⋅104n \leq e \leq 3 \cdot 10^{4}).

다음 ee개의 줄 각각에 정수 aia_{i}, bib_{i}와 실수 wa,bw_{a, b}를 출력한다. 이는 aia_{i}에서 bib_{i}로 가는 가중치 wa,bw_{a, b}의 연결을 나타낸다(∣wa,b∣≤1000|w_{a,b}| \le 1000).

예제1

  1. 예제 1

    입력
    3
    00010111
    
    예상 출력
    3 7
    1 1 1 2 2 2 3 
    12
    1 4 8.906
    1 5 0.749
    1 6 5.423
    2 4 -0.262
    2 5 -8.905
    2 6 5.582
    3 4 -0.663
    3 5 1.087
    3 6 -12.123
    4 7 66.372
    5 7 -55.329
    6 7 -47.883